Android虚拟键盘事件

时间:2011-11-15 17:35:41

标签: java android events keyboard

我正在尝试使用4个EditText块实现类似PIN码授权的iPhone,如下所示:

iphone pin authorization

我正在使用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事件或任何其他方式来实现它?

2 个答案:

答案 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

更好一点