Android的虚拟键盘事件
问题描述:
我试图实现iPhone一样的PIN码授权使用4块的EditText像这样:Android的虚拟键盘事件
我使用TextWatcher检查,如果场被改变,所以我能跳块之间。 下面是代码:
@Override
public void afterTextChanged(Editable s) {
if (del && index > 0) {
pin[index - 1].requestFocus();
}
else if (! del && ind < 3) {
pin[index + 1].requestFocus();
}
}
@Override
public void beforeTextChanged(CharSequence s, int start, int count,
int after) {
del = count != 0;
}
一切正常,除了当块是空的,DEL /空格键被按下时,我想回到以前的块并清除其价值的罚款。 这是TextWatcher让我失败的地方,因为在空白块中没有做任何改变,它什么都不做。
我尝试过使用keyEventListener,但它只捕获模拟器上的事件,而不是通过虚拟键盘在实际设备上。
任何人都可以提出一个想法,我如何捕获DEL事件或任何其他方式来实现这一点?
答
我找到了解决此问题的解决方法。这可能不是最好的解决方案,但它适用于我。 除了TextWatcher
我已经添加到InputFilter
块
@Override
public CharSequence filter(CharSequence source, int start, int end,
Spanned dest, int dstart, int dend) {
if (end == 0 && ind > 0 && dest.length() == 0) {
pin[ind - 1].requestFocus();
}
return null;
}
我也认为这是端口一个更好的主意来自TextWatcher
代码的其余部分InputFilter
答
也许你可以检查更改前后字段是否为空?不知道是否有任何其他按键可以将该字段留空,因此您可以说,后退被按下并跳转到前一个字段。好吧,这不是一个真正的技术解决方案,而只是查看问题的一种不同方式。
是啊,我想到了这一点。但是TextWatcher绑定onTextChange事件,所以如果没有改变,它不会触发。如果有适当的事件发生,我仍在审阅文档。感谢您的建议,但 –