2012-02-01 95 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

相关问题