隐藏 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 平板电脑输入文本。不过我觉得这个可以忽略不计。
我有自定义键盘,不想显示 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 平板电脑输入文本。不过我觉得这个可以忽略不计。