数字键盘与中英文键盘的切换
对于短信验证码的输入框,一般都是要求输入纯,但是如果给EditText仅仅设置了数字键盘,那么当日后短信验证码不再是纯数字的时候,用户就不能再切换中英文键盘切换了,所以一开始就给EditText设置了setInputType(InputType.TYPE_CLASS_TEXT)
,需用用户再点击一下才能进入数字键盘。测试人员测试时提出疑问,输入验证码时,是否能够立刻弹出数字键盘。找了很多资料,都没有找到首次弹出数值键盘,然后点击某个返回键,就可以切换其他键盘的实现,甚至在stackoverflow上面,有人回答说这样的交互方式无法实现,甚至向Android提出了 bug issue。
后来发现可以通过结合setInputType
和setOnEditorActionListener
这两个方法实现用户的手动切换数字键盘与中英文键盘。
首先在初始化时,EditText设置setInputType(InputType.TYPE_CLASS_NUMBER)
和setImeOptions(EditorInfo.IME_ACTION_DONE)
,并且设置setOnEditorActionListener
,在TextView.OnEditorActionListener
的方法boolean onEditorAction(TextView v, int actionId, KeyEvent event)
里面处理切换键盘的逻辑。具体思路如下:
getEditText().setOnEditorActionListener(new TextView.OnEditorActionListener() {
@Override
public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
// 获取EditText的文本内容
String text = VUtils.getViewText(getEditText());
if (StrUtils.isTextEmpty(text)) {
// 文本内容为空,进行键盘的切换
// 首先隐藏键盘
VUtils.hideSoftKeyboard(getEditText());
// 获取EditText的inputType
int inputType = getEditText().getInputType();
if (inputType == InputType.TYPE_CLASS_NUMBER) {
// 如果数字键盘,则设置为中英文键盘 input type
getEditText().setInputType(InputType.TYPE_CLASS_TEXT);
} else if (inputType == InputType.TYPE_CLASS_TEXT) {
// 如果是中英文键盘,则设置为数字键盘 input type
getEditText().setInputType(InputType.TYPE_CLASS_NUMBER);
}
// 延时300毫秒后,EditText重新获取焦点并且弹出键盘
showSoftKeyBoardDelay(300l,new IConsume<Object>(){
@Override
public void accept(Object o) {
getEditText().requestFocus();
VUtils.showSoftKeyboard(getEditText());
}
});
} else {
// 文本内容不为空,直接进行网络请求
}
}
});
网友评论