2016-09-07 105 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; 
    } 
}); 
相關問題