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 を見ても役に立ちません。