2012-03-08 6 views
5

3つのEditText要素があり、入力に4文字ある場合は1つのフィールドから次のフィールドにジャンプしたい。HTCロングプレスでTextWatcherのカウント文字が失敗する

私はこのために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は4を得るためにRを保持しているような「textCapCharacters」

番号を取得するには、キーの上にlongpressをやって、ありますほとんどのデバイスは、ユーザーがボタンを押し続けるまで文字を追加せず、文字4が選択された後にはAfterTextChangedを起動します。 HTCキーボード(この場合、2.3.5のHTC Desire)ではそうではありません。ユーザーがまだボタンを押しているにもかかわらず、RがEditTextに追加され、afterTextChangedが起動され、コードはそのジョブを実行し、次のフィールドにフォーカスを置きます。

どのようにこの望ましくない動作を防止できますか? onKeyDown/Upを見ることは、通常のキーストロークを登録しないため、役に立ちません。

答えて

1

残念ながら、HTCキーボードの不具合を修正する方法はありません。これはIMEのイベントであり、タッチイベントやキーイベントを傍受することは不可能です。したがって、ユーザーが次の入力をスキップするのではなく、単純にスキップするほうがよいでしょう。

それはしかしあなたのためにそれが重要だ場合、あなたはあなたが必要とするキーのみで、そこにキーボードのあなた自身のようなものを実装することができます。

+0

それは私が恐れていたことです、ありがとう、私はクライアントへの選択。とにかく長押しの代わりに数字入力を使用することは、HTCキーボードで常に可能です。 – Jurriaanr

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

    } 
} 

});

+0

すべて3つのイベントリスナー、onTextChanged、beforeTextChanged、afterTextChangedは理由のEditTextに追加された手紙よりも、とすぐにキーが押されたとして解雇されています。問題は、キーボードソフトウェアの実装は、ユーザーがキーを解放し、番号を選択して追加し、すべてのイベントリスナーを呼び出すのを待つことではないということです。 – Jurriaanr

関連する問題