我正在尝试使用4个EditText块实现类似PIN码授权的iPhone,如下所示:
我正在使用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 / BACKSPACE时,我想回到上一个块并清除它的'值。 这是TextWatcher失败的地方,因为在空块中没有做任何改变它没有做任何事情。
我尝试过使用keyEventListener但它只捕获模拟器上的事件,而不是通过虚拟键盘捕获实际设备上的事件。
任何人都可以建议如何捕获DEL事件或任何其他方式来实现它?
答案 0 :(得分:0)
也许您可以在更改前后检查字段是否为空?不知道是否有任何其他按键可以将该字段留空,所以你可以说,后退被按下并跳转到前一个字段。好的,这不是一个真正的技术解决方案,而只是一种查看问题的不同方式。
答案 1 :(得分:0)
我找到了解决此问题的方法。这可能不是最好的解决方案,但它对我有用。
除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