setTextIsSelectable如何阻止键盘出现?

时间:2017-07-21 01:58:51

标签: android android-edittext textview android-softkeyboard

如果我使用包含单个EditText的单个Activity创建一个简单的应用程序,我就

EditText editText = (EditText) findViewById(R.id.editText);
editText.setTextIsSelectable(true);

然后这会阻止键盘出现(在我的Android 5.0和7.1测试中)。这就是我想要的,正如这些问题所要求的那样:

source code

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

我部分要求因为我很好奇,但也因为我需要在我的应用程序中禁用系统键盘。我想了解发生了什么,以便我确信它确实在做我认为它正在做的事情。

更新

后续问答:

1 个答案:

答案 0 :(得分:1)

当您致电TextView.setTextIsSelectable(true)然后选择Editor.startSelectionActionModeInternal后的文字时,键盘不会显示,{{3}}会在显示TextView.isTextSelectable之前检查false是否为ActionMode文字选择 final boolean selectionStarted = mTextActionMode != null; if (selectionStarted && !mTextView.isTextSelectable() && mShowSoftInputOnFocus) { // Show the IME to be able to replace text, except when selecting non editable text. final InputMethodManager imm = InputMethodManager.peekInstance(); if (imm != null) { imm.showSoftInput(mTextView, 0, null); } }

Editor

我猜测它为什么以这种方式实现可能是因为框架团队决定他们希望文本{{1}}可以预测可以选择不跳过屏幕,因为键盘移动它。这可能只是一个UI决定。根据git,自2012年以来它一直都是这样,但是提交并没有特别提到有关该实现的任何内容。