2010-12-15 8 views

Antwort

116

Sie tun dies, indem Sie eine OnKeyListener auf Ihre EditText setzen.

Hier ist ein Beispiel aus meinem eigenen Code. Ich habe eine EditText mit dem Namen addCourseText, die die Funktion addCourseFromTextBox aufrufen wird, wenn entweder die Eingabetaste oder das D-Pad angeklickt wird.

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

dank viel, funktioniert super –

+4

Eigentlich ist es nicht für Weich garantiert Schlüssel. Zum Beispiel funktioniert es nicht für "ENTER" auf Nexus 7 (Android 4.2) und für "BACK" tut es. – Ghedeon

+0

BEST Beispiel ive gesehen! –

24

können Sie ein Attribut zu Ihrem EditText wie dieses könnte hinzufügen:

android:imeOptions="actionSearch" 
+1

Dies ist eine einfachere Lösung, wenn Sie einen Text zur Suche bearbeiten. – stevyhacker

5

zum EditText ein Attribut hinzufügen, wie android: imeOptions = "actionSearch"

dies ist die beste Möglichkeit, die Funktion zu tun

und die imeOptions haben auch einige andere Werte wie "go", "next", "done" usw.

0

Um zu vermeiden, dass der Fokus auf das nächste editierbare Feld (falls vorhanden) gesetzt wird, möchten Sie möglicherweise die Key-down-Ereignisse ignorieren, aber Key-up-Ereignisse behandeln. Ich bevorzuge auch, zuerst auf dem keyCode zu filtern, vorausgesetzt, dass es marginal effizienter wäre. Denken Sie übrigens daran, dass die Rückgabe von true bedeutet, dass Sie das Ereignis behandelt haben, also kein anderer Zuhörer. Wie auch immer, hier ist meine Version.

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" /> 

Sie können dann drückt auf die Aktionstaste hören, indem ein TextView.OnEditorActionListener für das Element EditText definieren. Antworten Sie in Ihrem Listener auf die entsprechende IME-Aktions-ID, die in der EditorInfo-Klasse definiert wurde, z. B. IME_ACTION_SEND. Zum Beispiel:

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; 
    } 
}); 

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

1

dies ist ein Beispiel für eine meiner app, wie ich handhaben

//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; 
         } 
     }); 
Verwandte Themen