当前位置: 首页 > 知识库问答 >
问题:

如何使用setTextIsSelectable禁用键盘后启用触摸键盘

楚岳
2023-03-14

我正在使用自定义的应用程序内键盘,因此需要禁用系统键盘。我可以用它来做

editText.setShowSoftInputOnFocus(false);

对于Android API 21。但要在API 11上做同样的事情,我正在做

editText.setTextIsSelectable(true);

有时我想在用setTextIsSelectable禁用系统键盘后再次显示它。但我不知道怎么做。执行以下操作确实会显示系统键盘,但如果用户隐藏键盘,然后再次单击编辑文本,键盘仍然不会显示。

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editText, 0);

我想我可以做editText.setOnFocus usChangeListener,然后手动显示或隐藏系统键盘,但我更愿意撤消setTextIsSelectable做的任何事情。以下也不起作用:

editText.setFocusable(true);
editText.setFocusableInTouchMode(true);
editText.setClickable(true);
editText.setLongClickable(true);

我该怎么做呢?

相关问题

共有1个答案

司徒炎彬
2023-03-14

简短的回答

执行以下操作将反转setTextIsSelectable(true)的效果,并允许键盘在EditText接收焦点时再次显示。

editText.setTextIsSelectable(false);
editText.setFocusable(true);
editText.setFocusableInTouchMode(true);
editText.setClickable(true);
editText.setLongClickable(true);
editText.setMovementMethod(ArrowKeyMovementMethod.getInstance());
editText.setText(editText.getText(), TextView.BufferType.SPANNABLE);

解释

阻止键盘显示的是isTextSelectable()true。你可以在这里看到(感谢@adneal)。

setTextIsSelectable的源代码是

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();
}

因此,上面简短回答部分中的代码首先将mTextIsSelectable设置为false,使用setTextIsSelectable(false),然后逐个撤销所有其他副作用。

 类似资料:
  • 当用户关注输入字段时,我需要禁用软键盘。我在Android系统中使用的是爱奥尼亚4和科尔多瓦8。 我必须这么做,因为该应用程序将在带有物理键盘的设备上使用,因此我想使用这个物理键盘 我该怎么办? 谢啦

  • 如果我创建了一个简单的应用程序,其中有一个活动,其中包含一个EditText,我会这样做 这样可以防止键盘出现(在我的Android5.0和7.1测试中)。这就是我想要的,正如这些问题所要求的: 从EditText禁用软键盘,但仍允许复制/粘贴 如何为特定活动禁用Android软键盘 Android:在所有编辑文本中禁用软键盘 如何在编辑文本时禁用键盘弹出 禁用编辑文本上的键盘 源代码是 但是我看

  • 键盘/鼠标/触摸板 [HW] atkbd.set={2|3} 设置atkbd驱动(CONFIG_KEYBOARD_ATKBD)的键盘类型:2(默认值)表示AT键盘;3 表示PS/2键盘。 [HW] atkbd.reset 在初始化AT或PS/2键盘时重置键盘状态。常用于解决从休眠状态唤醒后键盘失效的故障。 [HW] atkbd.softraw={0|1} 当键盘按键被按下时,是返回原始的扫描码(S

  • > 我已经尝试了所有的文本区功能,比如type=“email”等等,我无法让它在所有Android版本上都工作。 我已经安装了cordova插件ionic键盘,它显示的键盘没有任何建议(图A)。但当我轻触ion文本区域时,本机键盘会显示出来(图B)。 我如何解决这个问题,或者禁用本机键盘上的建议,或者让Cordova插件替换我的ion textarea的本机键盘,或者其他什么?谢谢 图像A 图像B

  • 我一直在到处找这个,但似乎找不到。我知道如何消除键盘使用,但我不知道如何使用?有人知道吗?

  • 问题内容: 我一直在寻找这个,但是我似乎找不到。我知道如何使用来关闭键盘,但是我不知道如何使用?有人知道吗? 问题答案: 如果要多次使用此功能,这是另一种执行此任务的方法: 现在在每个中,您所需要做的就是调用此函数: 此功能作为标准功能包含在我的存储库中,其中包含许多类似这样的有用的Swift扩展,请查看:https : //github.com/goktugyil/EZSwiftExtensio