2011-11-15 21 views
0

私はこのような4つのEditTextブロックとPINコード認証のようにiPhoneを実装しようとしています:Androidの仮想キーボードイベント

iphone pin authorization

私はフィールドが、私はジャンプすることができますので、変更されたかどうかを確認するTextWatcherを使用していますブロック間。

@Override 
public void afterTextChanged(Editable s) { 
    if (del && index > 0) { 
     pin[index - 1].requestFocus(); 
    } 
    else if (! del && ind < 3) { 
     pin[index + 1].requestFocus(); 
    } 
} 

@Override 
public void beforeTextChanged(CharSequence s, int start, int count, 
     int after) { 

    del = count != 0; 
} 

すべてのブロックが空で、DEL/BACKSPACEを押すと、私は戻って、前のブロックに行くと、そのの値をクリアしたいとき以外は正常に動作します:ここで は、コードがあります。 これは、何もしない空のブロックに変更が加えられていないため、TextWatcherが失敗するところです。

私はkeyEventListenerを使用しようとしましたが、実際のデバイスではなく、仮想キーボード経由でエミュレータ上のイベントを捕捉します。

私はDELイベントやこれを実装する他の方法をどのように捕まえることができますか?

答えて

0

この問題の回避策を見つけました。これはおそらく最善の解決策ではありませんが、私にとってはうまくいきます。 は別にTextWatcherから、私はブロック

@Override 
public CharSequence filter(CharSequence source, int start, int end, 
     Spanned dest, int dstart, int dend) { 
    if (end == 0 && ind > 0 && dest.length() == 0) { 
     pin[ind - 1].requestFocus(); 
    } 
    return null; 
} 

InputFilterを追加しました私も、ええ、私もそのことを考えて、それはTextWatcherからInputFilter

0

変更前後のフィールドが空であるかどうかを確認できますか?他のキーを押すとフィールドが空のままになることがあるかどうかわからないので、背面が押されて前のフィールドにジャンプすると言うことができます。これは本当の技術的解決策ではありませんが、問題を見るのとはちょっと違う方法です。

+0

にコードの残りのポートに良いアイデアだと思います。 TextWatcherはonTextChangeイベントにバインドされているため、何も変更されていなければ起動しません。適切なイベントがある場合は、まだドキュメントを確認しています。しかし、提案ありがとう –