Java 在HTC longpress上使用TextWatcher计数字符失败

Java 在HTC longpress上使用TextWatcher计数字符失败,java,android,android-edittext,textwatcher,Java,Android,Android Edittext,Textwatcher,我有3个EditText元素,如果输入中有4个字符,我想从一个字段跳到下一个字段 我使用TextWatcher进行以下操作: getEditView(R.id.edit_code1).addTextChangedListener(new TextWatcher() { @Override public void onTextChanged(CharSequence s, int start, int before, int count) {} @Override

我有3个EditText元素,如果输入中有4个字符,我想从一个字段跳到下一个字段

我使用TextWatcher进行以下操作:

getEditView(R.id.edit_code1).addTextChangedListener(new TextWatcher() {
    @Override
    public void onTextChanged(CharSequence s, int start, int before, int count) {}

    @Override
    public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

    @Override
    public void afterTextChanged(Editable input) {
        if(input.length() == 4){
            getEditView(R.id.edit_code2).requestFocus();
        }
    }
});
EditText的输入类型为“textCapCharacters”

当长按一个键以获得一个数字时,如按住R以获得一个4,大多数设备将不会添加字母,直到用户停止按住按钮,并在选择字母4后触发afterTextChanged。在HTC键盘上(本例中为2.3.5版HTC Desire),情况并非如此。即使用户仍在按住按钮,R也会添加到EditText,并触发afterTextChanged,代码会完成其工作,并将焦点放在下一个字段上

如何防止这种不受欢迎的行为?观看onKeyDown/Up不会有帮助,因为它不会记录正常的击键

       getEditView(R.id.edit_code1).addTextChangedListener(new TextWatcher() {
@Override
public void onTextChanged(CharSequence s, int start, int before, int count) {}
  if(input.length() >3){
        getEditView(R.id.edit_code2).requestFocus();
@Override
public void beforeTextChanged(CharSequence s, int start, int count, int after) {}

@Override
public void afterTextChanged(Editable input) {

    }
}

}))

不幸的是,这是HTC键盘上的一个bug,无法修复。这是IME中的一个事件,不可能截获触摸或按键事件,因此您最好让用户直接跳到下一个输入,而不是为他们这样做


如果这对你来说很重要,你可以在那里实现你自己的键盘,只需要你需要的键。

所有3个事件监听器,onTextChanged、beforeTextChanged、beforeTextChanged,beforeTextChanged都会在按下一个键时触发,因为不到一个字母被添加到edittext中。问题是,键盘软件的实现不会等到用户释放键并选择一个数字,然后再添加它,并调用所有事件侦听器。这正是我所担心的,谢谢,我将把选择权留给客户端。HTC键盘上始终可以使用数字输入,而不是长按。