我有一個EditText希望點文字不要跳出 [剪下(cut)/複製(copy)/貼上(paste)/分享(share)]選單,官方沒有提供設定介面耶,該怎麼辦?
參考:StackOverflow、簡書、CSDN
說明:
這個問題網路上查到有以下解,但是不同Android版本效果不同,所以我有針對Android 5.0、6.0、7.1、8.1做測試,就來看看吧~
- android:longClickable="false" → 5.0+就沒用了,照樣可選 (據說3.1+就沒用了)。
- android:textIsSelectable="false" → 5.0+就沒用了,照樣可選。
- setCustomSelectionActionModeCallback設定自己改寫的 → 5.0+就沒用了,照樣可選。
- setOnTouchListener針對ACTION_DOWN不做事 → 6.0+才有用。
- 繼承EditText改寫isSuggestionsEnabled跟canPaste(參考StackOverflow) → 5.0~8.1都不會跳出全選的選單,但是點擊游標下方的小水滴(text select handle)還是會有貼上(paste)選單。
- 自訂textSelectHandle(有單、左、右三個)為長寬0dp的矩形(參考StackOverflow) → 5.0~8.1都沒小水滴了,但全選時還是會跳選單。
- 把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吧。
沒有留言:
張貼留言