2010-12-15 53 views

Répondre

116

Vous le faites en définissant un OnKeyListener sur votre EditText.

Voici un exemple de mon propre code. J'ai un EditText nommé addCourseText, qui appellera la fonction addCourseFromTextBox lorsque l'on clique sur la touche d'entrée ou sur le pavé directionnel.

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

merci beaucoup, fonctionne très bien –

+4

En fait, ce n'est pas garanti pour les gla clés. Par exemple, il ne fonctionne pas pour "ENTRER" sur Nexus 7 (Android 4.2) et pour "RETOUR" il le fait. – Ghedeon

+0

MEILLEUR exemple vu! –

24

peut-être vous pouvez ajouter un attribut à votre EditText comme ceci:

android:imeOptions="actionSearch" 
+1

Cette solution est plus simple si vous créez un texte d'édition de recherche. – stevyhacker

5

ajouter un attribut à la EditText comme android: imeOptions = "actionSearch"

c'est le meilleur façon de faire la fonction

et le imeOptions ont aussi d'autres valeurs comme "aller", "suivant", "fait", etc.

0

Pour éviter que le focus ne passe au champ modifiable suivant (si vous en avez un), vous pouvez ignorer les événements de gestion des clés, mais gérer les événements de manipulation. Je préfère aussi filtrer d'abord sur le keyCode, en supposant qu'il serait légèrement plus efficace. Au fait, rappelez-vous que le fait de renvoyer vrai signifie que vous avez géré l'événement, donc aucun autre auditeur ne le fera. Quoi qu'il en soit, voici ma 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" /> 

Vous pouvez ensuite écouter appuie sur le bouton d'action en définissant un TextView.OnEditorActionListener pour l'élément EditText. Dans votre programme d'écoute, répondez à l'ID d'action IME approprié défini dans la classe EditorInfo, par exemple IME_ACTION_SEND. Par exemple:

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

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

1

c'est un échantillon d'un de mes app comment je manipule

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