9

長押しの編集メニュー(コピー/貼り付け)と、編集テキストボックスのダブルタップ全選択機能を無効にするソリューションを探しています。ここで、この問題に対するいくつかの解決策を同様の方法で読みましたが、さらに一歩進める必要があります。

このアプリでは、ユーザーがアプリでコピー/貼り付け機能を使用できないようにする必要があり、この機能を無効にする方法が必要です。この機能は、2.3 API でも新しいタブレットでも使用できます。NexusOne 電話デバイスと Galaxy タブレットでテストしています。(minSDK は 8、ターゲットは 10)

現在、私はこれを使用しています(例として): edittextPassword.setLongClickable(false); -ポップアップ編集メニューを無効にします。

このメソッドは電話デバイスで機能し、編集メニュー ポップアップが表示されないようにします。タブレットでは、これは長押しアクションからも無効になります。ただし、タブレットには、すべてのテキストを選択して編集メニューを開くダブルタップの新しい機能があります。古い API が新しい API 機能をキャンセル/トラップ/無効にする方法、またはダブルタップ ジェスチャを防止する方法はありますか?


更新:GestureDetector に接続された setLongClickable(false) と setOnTouchListener の組み合わせを使用して (提案してくれた Nikola に感謝します)、開くことからダブルクリックとロングクリックの編集メニューをトラップ/キャンセルすることができます。

理解する次の部分はこれです... Samsung電話(Galaxy S、現時点では他のデバイスについてはわかりません)では、フィールドをタップすると、カーソルとフローティングカーソルポインターボタンが表示されます(適切な名前?? )。このポインター ボタンをクリックすることも、編集メニューを開く別の方法です。これを無効にする方法を知っている人はいますか?私の唯一の回避策は、TextWatcher を使用して BeforeTextChanges と AfterTextChanges でクリップボードをクリアすることです。これにより、[コピー/貼り付け] メニューに移動した場合でも、クリップボードがクリアされ、貼り付けるものがないことが保証されます。

4

1 に答える 1

1

カーソルコントローラーまたはハンドルと呼ばれる「フローティングカーソルポインターボタン」と、クリックすると表示されるコンテキストメニューについては、はい、無効にする方法があります。私はあなたがこれを参照していると仮定しています:

貼り付けメニュー付きのテキスト選択ハンドル

setLongClickable(false) および setOnTouchListener コードに加えて、PASTE/REPLACE メニューshow()が (文書化されていない)android.widget.Editorクラスのメソッドに表示されないようにする修正があります。メニューが表示される前に、チェックが行われif (!canPaste && !canSuggest) return;ます。これらの変数を設定するための基礎として使用される 2 つのメソッドは、両方ともEditTextクラスにあります。

より完全な回答はこちらにあります

@CommonsWare が言及しているように、個々のデバイス メーカーがEditTextコントロールのデフォルトの AOSP 動作を変更した可能性があるため、テストが必要です。

于 2015-03-06T07:16:05.423 に答える