隐藏 Android 软键盘并且只允许在 EditText 上输入数字

Hide Android soft keyboard and only allow digits on EditText

我有自定义键盘,不想显示 Android 软键盘。这可以通过以下代码 (How to hide Android soft keyboard on EditText) 实现:

editText.setInputType(InputType.TYPE_NULL);

但是 EditText 应该只允许数字。这可以通过以下方式实现:

editText.setInputType(InputType.TYPE_CLASS_NUMBER);

我似乎找不到结合这两种功能的方法。将输入类型设置为 TYPE_NULL 将在使用硬件键盘时允许使用非数字字符,将输入类型设置为 TYPE_CLASS_NUMBER 会导致弹出软键盘。

而不是

editText.setInputType(InputType.TYPE_NULL);

使用

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(fieldController.getFieldComponent().getWindowToken(), 0); //hide keyboard

隐藏键盘。

然后,您可以将输入类型设置为您想要的。

editText.setInputType(InputType.TYPE_CLASS_NUMBER);

airowe 的回答为我指明了正确的方向。此解决方案似乎不适用于 Android 2.3.X 设备(软键盘仍会弹出)。所以我稍微调整了一下。 我最终使用了以下代码:

InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.hideSoftInputFromWindow(editText.getWindowToken(), 0); //hide keyboard

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB)
{
   editText.setInputType(InputType.TYPE_CLASS_NUMBER);
}
else
{
   editText.setRawInputType(InputType.TYPE_NULL);
}

这可能会允许 pre-honeycomb 平板电脑输入文本。不过我觉得这个可以忽略不计。