2013-01-21 152 views
9

我正在尋找解決方案來禁用長按編輯菜單(複製/粘貼)以及編輯文本框的雙擊全選功能。我已經以類似的方式閱讀了關於此問題的一些解決方案,但需要更進一步。Android - 防止edittext複製/粘貼和雙擊選擇所有

對於這個應用程序,我有一個要求,以防止用戶使用我的應用程序的複製/粘貼功能,並需要一種方法來禁用此功能,將在2.3 API工作,以及在新的平板電腦使用時。我正在測試NexusOne手機設備和Galaxy平板電腦。 (minSDK是8,目標是10)

目前我正在使用這個(舉例): edittextPassword.setLongClickable(false); - 禁用彈出編輯菜單,太棒了!

此方法在電話設備上工作以防止編輯菜單彈出。在平板電腦上,長按操作也禁用了此功能。然而,該平板電腦具有更新的雙擊功能,可以選擇所有文本並打開編輯菜單。是否有一種方法讓舊API取消/陷阱/禁用更新的API功能或防止雙擊手勢?


更新:使用setLongClickable(假的),並連接到GestureDetector setOnTouchListener的組合(感謝你對尼古拉建議),我能夠捕獲/取消從開放的雙擊和長按菜單編輯。

接下來要弄清楚的是......在三星手機上(Galaxy S,目前還不確定其他設備),當您點擊一個字段時,會得到一個光標和一個浮動光標指針按鈕(正確的名稱??)。點擊這個指針按鈕是另一種打開編輯菜單的方法。任何人都知道如何禁用這個?我唯一的解決方法是使用TextWatcher清除BeforeTextChanges和AfterTextChanges上的剪貼板。這確保了即使您進入複製/粘貼菜單,剪貼板也被清除,並且沒有任何要粘貼的東西。

+0

「目前我正在使用這個:edittextPassword.setLongClickable(false); -disable彈出窗口編輯菜單,太棒了!「 - 如果在所有設備上都能正常工作,我會感到很驚訝,不止一家制造商已經修改了EditText在這些操作方面的工作原理 – CommonsWare

+4

請同時考慮你的用戶我一直對EditTexts感到沮喪,不允許粘貼,因爲我爲我的所有帳戶使用隨機生成的強密碼(Dashlane),並且輸入這些密碼非常困難,所以我通常必須將密碼更改爲簡單的方式,然後將其更改爲強密碼。它吸... – Simon

+1

使用GestureListener,每當有雙擊/長按時返回true,如果事件沒有被處理,它會阻止系統做出相應的反應 –

回答

1

關於「浮動光標指針按鈕」(稱爲cursor controller, or handle)和點擊時出現的上下文菜單,是的,有一種方法可以禁用它。我假設你指的是這樣的:出現在的的show()方法

Text selection handle with paste menu

除了setLongClickable(假)和setOnTouchListener代碼,修復在於防止粘貼/替換菜單(未記錄)android.widget.Editor類。在菜單出現之前,將對if (!canPaste && !canSuggest) return;進行檢查。被用作基礎來設置這些變量的兩種方法都處於EditText類:

更完整的答案是available here

正如@CommonsWare所提到的,單個設備製造商可能已經改變了EditText控件的默認AOSP行爲,因此測試是必要的。