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