在Jelly Bean上处理“Enter”键

时间:2014-02-17 16:38:08

标签: android keyboard handle enter

我正在制作一个应用程序,在这个应用程序中我有编辑文本。我想当用户在编辑文本结束时写一些文本然后按回车键,我想要它调用一些命令。这就是我所做的。这在ICS中有效,但是当我尝试其他设备(Jelly Bean)时,它不起作用。

inputViaTextChatbot.setOnEditorActionListener(new OnEditorActionListener() {
        public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
            if ((event != null && (event.getKeyCode() == KeyEvent.KEYCODE_ENTER)) || (actionId == EditorInfo.IME_ACTION_DONE)) {
                // hide the keyboard  
                InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);  
                imm.hideSoftInputFromWindow(v.getWindowToken(), 0);
                // process 
                getThis = inputViaTextChatbot.getText().toString();
                if (getThis!=null && getThis.length()>1) {  
                    try {
                    Log.v("Got This: ", getThis);
                    } catch (IllegalStateException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    } catch (IOException e) {
                        // TODO Auto-generated catch block
                        e.printStackTrace();
                    }

                    inputViaTextChatbot.setText("");  
                }
            }    
            return false;
        }
    });

任何人都可以帮我这样做吗?

1 个答案:

答案 0 :(得分:2)

这是一个已知的错误,导致在多个设备上无法识别Enter密钥。避免它并使其工作的解决方法如下:

像这样创建一个TextView.OnEditorActionListener

TextView.OnEditorActionListener enterKey = new TextView.OnEditorActionListener() {
  public boolean onEditorAction(TextView view, int actionId, KeyEvent event) {
    if (actionId == EditorInfo.IME_ACTION_GO) {
      // Do whatever you need
    }
    return true;
  }
};

假设您的ViewEditText,您需要以这种方式设置:

final EditText editor = (EditText) findViewById(R.id.Texto);
editor.setOnEditorActionListener(enterKey);

最后一步是将以下属性分配给EditText

android:imeOptions="actionGo"

这基本上会更改enter键的默认行为,将其设置为actionGo IME选项。在您的处理程序中,只需为您创建的侦听器指定它,这样就可以获得enter key行为。