2018年3月22日 星期四

[Android] 禁止EditText跳出選單 (EditText disable popup menu )

問題:
我有一個EditText希望點文字不要跳出 [剪下(cut)/複製(copy)/貼上(paste)/分享(share)]選單,官方沒有提供設定介面耶,該怎麼辦?

參考:StackOverflow簡書CSDN

說明:
這個問題網路上查到有以下解,但是不同Android版本效果不同,所以我有針對Android 5.0、6.0、7.1、8.1做測試,就來看看吧~


  1. android:longClickable="false" → 5.0+就沒用了,照樣可選 (據說3.1+就沒用了)。
  2. android:textIsSelectable="false" → 5.0+就沒用了,照樣可選。
  3. setCustomSelectionActionModeCallback設定自己改寫的 → 5.0+就沒用了,照樣可選。
  4. setOnTouchListener針對ACTION_DOWN不做事 → 6.0+才有用。
  5. 繼承EditText改寫isSuggestionsEnabled跟canPaste(參考StackOverflow) → 5.0~8.1都不會跳出全選的選單,但是點擊游標下方的小水滴(text select handle)還是會有貼上(paste)選單。
  6. 自訂textSelectHandle(有單、左、右三個)為長寬0dp的矩形(參考StackOverflow) → 5.0~8.1都沒小水滴了,但全選時還是會跳選單。
  7. 把EditText的mEditor抓出,把Insert handle跟Select handle關掉(參考簡書) → 5.0~8.1都有用。


其中,5有點危險,因為有改寫一個non-public method canPaste,如果Google改名就沒用了;
然後7更危險,還會被Android Studio警告,因為有用名稱抓內部資源,如果Google改名就沒用了,沒防呆還會當。

但是如果不用5或7似乎真的沒解。

所以...我是推薦用3+5+6,詳細就參考StackOverflow吧。


沒有留言:

張貼留言