Android:在所有EditTexts上禁用软键盘

Yan*_*niv 22 android android-edittext

我正在使用几个EditTexts 在Android上进行对话.onCreate()为了禁用软键盘,我把这一行放在了:

Keypad.this.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN);
Run Code Online (Sandbox Code Playgroud)

问题是它只在对话框出现时无效.当我移动到下一个时EditText,键盘出现而不是下降.

有人知道如何解决这个问题吗?

zer*_*021 33

如果你看看onCheckIsTextEditor()方法实现(在TextView中),它看起来像这样:

@Override
public boolean onCheckIsTextEditor() {
    return mInputType != EditorInfo.TYPE_NULL;
}
Run Code Online (Sandbox Code Playgroud)

这意味着您不必进行子类化,您可以:

((EditText) findViewById(R.id.editText1)).setInputType(InputType.TYPE_NULL); 
Run Code Online (Sandbox Code Playgroud)

我尝试在布局xml中设置android:inputType ="none",但它对我不起作用,所以我以编程方式完成.

  • 这将阻止与EditText的任何触摸交互(即长按和选择).这可能不是许多开发人员想要的效果...... (2认同)

jkh*_*uw1 25

创建自己的类,扩展EditText和覆盖onCheckIsTextEditor():

public class NoImeEditText extends EditText {
    public NoImeEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
    }
    @Override
    public boolean onCheckIsTextEditor() {
        return false;
    }
}
Run Code Online (Sandbox Code Playgroud)


ASP*_*ASP 21

试试吧..

edittext.setInputType(InputType.TYPE_NULL);      
if (android.os.Build.VERSION.SDK_INT >= 11)   
{  
    edittext.setRawInputType(InputType.TYPE_CLASS_TEXT);  
    edittext.setTextIsSelectable(true);  
}
Run Code Online (Sandbox Code Playgroud)

  • 这不适用于android oreo 8.0。 (2认同)

43m*_*hew 5

我一整天都在寻找解决方案,我遇到了这种方法.我把它放在这里是因为它似乎完美地回答了这个问题.

EditText et = ... // your EditText
et.setKeyListener(null) //makes the EditText non-editable so, it acts like a TextView.
Run Code Online (Sandbox Code Playgroud)

不需要子类.这与使EditText不可聚焦的主要区别在于EditText仍然有自己的光标 - 你可以选择文本等等.它所做的就是抑制IME弹出自己的软键盘.


Chr*_*use 5

称呼TextView.setShowSoftInputOnFocus(false)。此方法自 API 级别 21 起就有记录,但自 API 级别 16 起就已存在(只是对 JavaDoc 隐藏了)。我在 AlertDialog 中将其与 API 级别 16 结合使用dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_HIDDEN)

在API级别14中,有一个隐藏方法setSoftInputShownOnFocus()似乎具有相同的目的,但我没有测试过。

优点是InputType.TYPE_NULL,可以使用所有正常输入类型(例如,用于密码输入),并且触摸事件将光标定位在文本内的正确位置。