Android的虚拟键盘事件

问题描述:

我试图实现iPhone一样的PIN码授权使用4块的EditText像这样:Android的虚拟键盘事件

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 /空格键被按下时,我想回到以前的块并清除其价值的罚款。 这是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

也许你可以检查更改前后字段是否为空?不知道是否有任何其他按键可以将该字段留空,因此您可以说,后退被按下并跳转到前一个字段。好吧,这不是一个真正的技术解决方案,而只是查看问题的一种不同方式。

+0

是啊,我想到了这一点。但是TextWatcher绑定onTextChange事件,所以如果没有改变,它不会触发。如果有适当的事件发生,我仍在审阅文档。感谢您的建议,但 –