5

我有 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 无济于事,因为它不会记录正常的击键。

4

2 回答 2

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

    }
}

});

于 2012-03-18T14:46:24.533 回答
1

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

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

于 2012-03-21T10:34:14.730 回答