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

时间:2012-03-08 15:21:46

标签: 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
    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的inputType是“textCapCharacters”

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

如何防止这种不良行为?观看onKeyDown / Up无济于事,因为它没有注册正常的击键。

2 个答案:

答案 0 :(得分:2)

       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) {

    }
}

});

答案 1 :(得分:1)

不幸的是,它是HTC键盘中的一个错误,无法修复它。这是IME中的一个事件,它不可能拦截触摸或键事件,所以你可能最好只是让用户跳到下一个输入而不是你为它们做这些。

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