EditText ロングタッチの場合、カスタム アクション バーが欲しいです。画面の上部に表示されるアクション バーの代わりに、その位置を制御する必要があります。また、いくつかのカスタム ボタンを追加したいと思います (しかし、それはおそらく簡単な部分です)。
はい、Android のガイドラインに違反していることに気づきました。
ポップアップの作成と配置は簡単です。難しいのは、EditText のテキスト選択動作を維持することです。これにより、長いタッチの場合、標準の動作に従ってテキストが選択されます。
私はいくつかの実験を試みましたが、いずれも何らかの理由で失敗しました:
setCustomSelectionActionModeCallback を使用し、その onCreateActionMode() で「false」を返します。これにより、アクション バーが表示されなくなりますが、ロング タッチでテキストを選択することもできなくなります。
#1 に続き、EditText をサブクラス化し、独自の onTouch メソッドを含めてみました。onTouch では、ACTION_UP に何らかのロジックを追加するとうまくいくのではないかと考えました。2 つのバリエーション:
ACTION_UP から常に false を返します。EditText は ACTION_UP を認識せず、すべてのタッチを長いタッチとして扱います。したがって、カーソルの位置決めはありません。
EditText が ACTION_UP を受け取れるようにしますが、ロングタッチの場合は、選択を設定する関数を投稿します。これは機能する場合もありますが、カーソルを単一の場所に設定するだけで、選択範囲を強調表示しない場合もあります。つまり、setSelection() が壊れます。
上記のマイナーなバリエーションを試しました。これまでのところ何も機能しません。また、何かが機能したとしても、それはおそらく非常に脆弱なソリューションであり、EditText の次の Android リビジョンで機能しなくなる可能性があります。
どんなアイデアでも大歓迎です!