2012-02-01 92 views
1

我正在使用平板電腦(v3.1)。 我設置onKeyListener爲一個EditText:當按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; 
     } 
    }); 

當按下tab鍵,收到一鍵碼66(未61作爲API說),同樣爲KEYCODE_ENTER

+0

你用什麼設備? – ariefbayu 2012-02-01 12:09:54

+0

@silent摩托羅拉XOOM – daVe 2012-02-01 12:13:24

回答

0

它實際上不取決於設備,而是取決於您選擇的鍵盤。我之前遇到過這個問題。如果換掉不同的鍵盤,你會發現它突然開始反應,如你所料。我不確定這是什麼原因,但你應該嘗試一下,看看是否能解決你的問題。

+0

你說的是改變鍵盤語言嗎? – daVe 2012-02-01 12:58:49

+0

也許不是鍵盤語言。而是鍵盤應用程序。 – ariefbayu 2012-02-01 14:23:36

+0

我認爲這不是一個選項.. – daVe 2012-03-09 13:56:15

0

這取決於您使用鍵盤的環境。對於文本/純文本輸入,這不應該是一個問題。但是,選項卡用於將焦點從一個元素更改爲另一個元素。由於標籤在大多數SoftIME的Android上都不存在,因此攔截TAB並提供Enter,這在大多數情況下有助於填寫表格或輸入後焦點需要更改爲其他元素的情況。

EX)的用戶名密碼&

用戶輸入自己的用戶名和按下回車,重點是現在改爲密碼列。

此外,android還使用了一種名爲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"); 
} 

希望這有助於你出去。

-Chris

相關問題