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 に答える