2012-02-01 18 views
1

私はタブレット(v3.1)で作業しています。 私はのEditTextのためonKeyListenerを設定します。Tabキーを押すとタブキーを押したときにKeyCode = 66が表示されるのはなぜですか?

myEditText.setOnKeyListener(new View.OnKeyListener() { 
    @Override 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if(keyCode == KeyEvent.KEYCODE_ENTER && 
      event.getAction() == KeyEvent.ACTION_DOWN) { 
      runStuff(); 
     } 
     return false; 
     } 
    }); 

は、Iキーコード66(61ないAPIが言うように)、KEYCODE_ENTERと同じを受けます。

+0

どのデバイスをお使いですか? – ariefbayu

+0

@silent Motorola XOOM – daVe

答えて

0

これは実際にはデバイスに依存せず、選択したキーボードによって異なります。私は前にこれにぶつかりました。あなたが別のキーボードのためにキーボードを交換すると、突然それが期待どおりに反応することがわかります。私はこれの原因がわからないが、それを試してみて、それがあなたの問題を解決するかどうか見てみるべきだ。

+0

キーボードの言語を変更することについて話していますか? – daVe

+0

キーボード言語ではないかもしれません。むしろ、キーボードアプリケーション。 – ariefbayu

+0

私はそれがオプションではないと思う.. – daVe

0

キーボードを使用している状況によって異なります。テキスト/プレーン入力の場合、これは問題ではありません。ただし、tabはある要素から別の要素にフォーカスを変更するために使用されます。ほとんどのSoftIMEのAndroidタブではタブが存在しないため、TABを入力してEnterキーを押すと、フォームが入力されている場所や入力後に別の要素にフォーカスを移動する必要がある場所で役立ちます。

EX)、ユーザー名、パスワード&

ユーザーが自分のユーザー名を入力し、Enterキーを押すと、フォーカスは、現在、パスワード欄に変更されます。

さらに、アンドロイドはEditorInfoという名前を使用して、キーボードの状態を変更します。このスレッドを見て、EditorInfoを簡単に使用してください - >Android: how to make keyboard enter button say "Search" and handle its click?

私はこの問題を数回実行しました。これを変更する唯一の方法は、onKeyListenerをオーバーライドするか、onKeyDown関数をオーバーライドするカスタムEditTextを作成することです。このようにして、keyCode == KeyEvent.KEYCODE_TABを呼び出すと、実際の値が得られます。

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) { 
    if(keyCode == KeyEvent.KEYCODE_TAB) 
    { 
     tab(); // implemented seperate 
     return false; // ignore focus changes when tab is pressed 
    } 
    super.onKeyUp(keyCode, event); 
} 

// additional helper methods 

public void insert(String s) 
{ 
    int start = start(); 
    int end = end(); 
    if(start != end) 
    { 
     replace(s, start, end); 
    } 
    else 
    { 
     getEditableText().insert(start, s); 
    } 
    setSelection(start); // changes focus back to edittext 
} 

public void replace(String s, int st, int e) 
{ 
    getEditableText().replace(st, e, s); 
} 

public void tab() 
{ 
    insert("\t"); 
} 

希望すると、これが役に立ちます。

-hris

関連する問題