遇到一个奇葩需求,要记录输入法上一次的输入状态,例如上一次用切换了数字输入,关闭后再打开输入框时要优先弹出数字键盘,但是不能限制只能输入数字;
经过一番测试,找到解决办法:
首先是获取当前输入法的输入方式(办法比较死,没找到更好的办法):
//etInputType为EditText
etInputType.addTextChangedListener(new TextWatcher() {
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {
return;
}
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {
String changeStr = s.toString();
changeStr = changeStr.substring(start, start + count);
if (changeStr.length() > 0) {
char c = changeStr.charAt(0);
if (Character.getType(c) == Character.OTHER_LETTER) {
//中文
} else if (Character.isDigit(c)) {
//数字
} else if (Character.isLetter(c)) {
//字母
} else {
//其他
}
}
return;
}
@Override
public void afterTextChanged(Editable s) {
return;
}
});
其次是打开时设置输入法优先弹出
etInputType为EditText
etInputType.setKeyListener(new TextKeyListener(TextKeyListener.Capitalize.NONE, false) {
@Override
// public int getInputType() {
// 优先弹出数字键盘
// return InputType.TYPE_CLASS_PHONE;
// }
public int getInputType() {
//优先弹出字母键盘
return InputType.TYPE_MASK_CLASS;
}
});
以上解决方案在搜狗输入法完美通过