2010-12-15 110 views

回答

116

您可以在EditText上設置OnKeyListener

這是我自己的代碼示例。我有一個名爲addCourseTextEditText,當單擊回車鍵或d-pad時,它將調用功能addCourseFromTextBox

addCourseText = (EditText) findViewById(R.id.clEtAddCourse); 
addCourseText.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: 
        addCourseFromTextBox(); 
        return true; 
       default: 
        break; 
      } 
     } 
     return false; 
    } 
}); 
+0

非常感謝的一個樣本,偉大工程 – 2010-12-16 08:28:32

+4

事實上,它不能保證軟鍵。例如,它不適用於Nexus 7(Android 4.2)上的「ENTER」和它的「BACK」功能。 – Ghedeon 2012-11-28 23:01:24

+0

我看過的最好的例子! – 2012-12-23 02:32:34

24

可能是你可以一個屬性添加到您的EditText這樣的:

android:imeOptions="actionSearch" 
+1

如果您正在構建搜索編輯文本,這是更簡單的解決方案。 – stevyhacker 2016-05-10 14:28:07

5

的屬性添加到的EditText像 機器人:imeOptions = 「actionSearch」

這是最好的方式做功能

和imeOptions也有一些其他的值,如「去」,「下一步」,「完成」等。

0

爲避免焦點前進到下一個可編輯字段(如果有的話),您可能需要忽略按鍵事件,但是處理按鍵事件。我還傾向於首先對keyCode進行過濾,假設它會稍微更有效。順便說一句,請記住,返回true意味着您已處理該事件,因此沒有其他偵聽器會這樣做。無論如何,這是我的版本。

ETFind.setOnKeyListener(new OnKeyListener() 
{ 
    public boolean onKey(View v, int keyCode, KeyEvent event) 
    { 
     if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER 
     || keyCode == KeyEvent.KEYCODE_ENTER) { 

      if (event.getAction() == KeyEvent.ACTION_DOWN) { 
       // do nothing yet 
      } else if (event.getAction() == KeyEvent.ACTION_UP) { 
         findForward();  
      } // is there any other option here?... 

      // Regardless of what we did above, 
      // we do not want to propagate the Enter key up 
      // since it was our task to handle it. 
      return true; 

     } else { 
      // it is not an Enter key - let others handle the event 
      return false; 
     } 
    } 

}); 
27
<EditText 
    android:id="@+id/search" 
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:hint="@string/search_hint" 
    android:inputType="text" 
    android:imeOptions="actionSend" /> 

然後,您可以通過定義的EditText元素的TextView.OnEditorActionListener監聽行動上的按鈕按下。在您的偵聽器中,響應EditorInfo類中定義的相應IME操作ID,例如IME_ACTION_SEND。例如:

EditText editText = (EditText) findViewById(R.id.search); 
editText.setOnEditorActionListener(new OnEditorActionListener() { 
    @Override 
    public boolean onEditorAction(TextView v, int actionId, KeyEvent event) { 
     boolean handled = false; 
     if (actionId == EditorInfo.IME_ACTION_SEND) { 
      sendMessage(); 
      handled = true; 
     } 
     return handled; 
    } 
}); 

來源:https://developer.android.com/training/keyboard-input/style.html

1

這是我的應用程序如何處理

//searching for the Edit Text in the view  
    final EditText myEditText =(EditText)view.findViewById(R.id.myEditText); 
     myEditText.setOnKeyListener(new View.OnKeyListener() { 
      public boolean onKey(View v, int keyCode, KeyEvent event) { 
       if (event.getAction() == KeyEvent.ACTION_DOWN) 
         if ((keyCode == KeyEvent.KEYCODE_DPAD_CENTER) || 
          (keyCode == KeyEvent.KEYCODE_ENTER)) { 
           //do something 
           //true because you handle the event 
           return true; 
           } 
         return false; 
         } 
     });