如果我創建一個活動的簡單的應用程序包含單個的EditText,和我做setTextIsSelectable如何防止鍵盤出現?
EditText editText = (EditText) findViewById(R.id.editText);
editText.setTextIsSelectable(true);
那麼這可以防止鍵盤出現(在我的測試在Android 5.0和7.1)。這就是我想要的東西的要求,在這些問題:
- Disable soft-keyboard from EditText but still allow copy/paste?
- How to disable Android Soft Keyboard for a particular activity?
- Android: Disable soft keyboard at all EditTexts
- How to disable keypad popup when on edittext?
- Disable keyboard on EditText
public void setTextIsSelectable(boolean selectable) {
if (!selectable && mEditor == null) return; // false is default value with no edit data
createEditorIfNeeded();
if (mEditor.mTextIsSelectable == selectable) return;
mEditor.mTextIsSelectable = selectable;
setFocusableInTouchMode(selectable);
setFocusable(selectable);
setClickable(selectable);
setLongClickable(selectable);
// mInputType should already be EditorInfo.TYPE_NULL and mInput should be null
setMovementMethod(selectable ? ArrowKeyMovementMethod.getInstance() : null);
setText(mText, selectable ? BufferType.SPANNABLE : BufferType.NORMAL);
// Called by setText above, but safer in case of future code changes
mEditor.prepareCursorControllers();
}
但我不明白這是怎麼回事禁止出現輸入法。
調用以下方法全部返回true
我是否設置了setTextIsSelectable
。
editText.isFocusable(); // true
editText.isFocusableInTouchMode(); // true
editText.isClickable(); // true
editText.isLongClickable(); // true
我一部分問,因爲我好奇,但也因爲我需要禁用我的應用程序的系統鍵盤。我想了解正在發生的事情,以便我確信它確實在做我認爲正在做的事情。
更新
後續問題和答案:
[Editor.startSelectionActionModeInternal](https://github.com/android/platform_frameworks_base/blob/master/core/java/android/widget/Editor.java#L2009) – adneal
@adneal,所以它似乎是因爲'!mTextView.isTextSelectable()'。隨意添加這個答案。我有點奇怪,爲什麼確保文本不可選擇將是顯示鍵盤的一個決定性因素(但是這些信息對於回答我的問題並不是必需的)。 – Suragch