2016-09-07 93 views
0

我正在开发一个聊天应用程序,在编辑邮件(在EditText中)时在软键盘上按下ENTER键。目的是直接发送文本。 显然我也实现了“发送”按钮。如何捕捉软键盘“ENTER”

两次尝试:

  1. 使用editText.addTextChangedListener(new TextWatcher()..

    结果:我碰到一个 “\ n” 字符或者在onTextChanged和afterTextChanged
    回调。我可以“删除”此字符并发送聊天,但我不喜欢
    这种方式。

  2. 使用editText.setOnEditorActionListener(new TextView.OnEditorActionListener()..

    结果:它不工作。

有没有更好的解决方案?

+2

http://stackoverflow.com/的可能的复制问题/ 1489852/android-handle-enter-in-an-edittext – kgandroid

+0

在上面的链接中,选中的答案摘录如下:“..setOnEditorActionListener()method,all on TextView”,但我使用EditText – MBDevelop

+0

你看过所有着名的聊天应用我只看了FB Messagner,Whatsapp,IMO和Skype。他们都在应用程序中提供了一个单独的发送按钮。现在,按照@Amy的建议添加'android:imeOptions =“actionSend”'可能会为您提供实现所需内容的手段(我从未尝试过),但是您将无法在聊天中添加新行。 – Abbas

回答

0

试试这个;

editText.setOnKeyListener(new OnKeyListener() 
{ 
    public boolean onKey(View v, int keyCode, KeyEvent event) 
    { 
     if (event.getAction() == KeyEvent.ACTION_DOWN) 
     { 
      switch (keyCode) 
      { 
       case KeyEvent.KEYCODE_DPAD_CENTER: 
       case KeyEvent.KEYCODE_ENTER: 
        //Perform Your action 
        return true; 
       default: 
        break; 
      } 
     } 
     return false; 
    } 
}); 
+0

但是,从Android开发者处:“将硬件按键事件分派到此视图时要调用的回调接口定义。将回调函数发送给视图之前将调用该回调函数,这只对硬件键盘有用。一个软件输入法没有义务触发这个聆听者。“我需要和关于软键盘的建议。 – MBDevelop

+0

然后你可以在xml中使用'android:imeOptions =“actionSend”'。 – Amy

+0

它不起作用 – MBDevelop

0

我使用它来捕捉软键盘输入和它的伟大工程,但我不知道这是适合你:

editText.setOnKeyListener(new View.OnKeyListener() { 
    @Override 
    public boolean onKey(View view, int keyCode, KeyEvent keyEvent) { 
     if (keyCode == KeyEvent.KEYCODE_ENTER && keyEvent.getAction() == KeyEvent.ACTION_UP) { 
      //do something. 
      return true; 
     } 
     return false; 
    } 
});