2010-09-16 7 views
3

Je suis un débutant relatif avec Android. Quelqu'un at-il une explication saine pour savoir comment écouter les touches et les touches programmables dans un EditText/TextView?Confus au sujet de la gestion des événements clés Android. Des bonnes explications?

Je serais ravi de voir un tutoriel complet ou un ensemble d'exemples. Si je comprends bien, je peux ajouter un KeyListener à mon activité, par exemple. onKeyDown(), onKeyUp() mais quand j'essaie cela, je ne peux pas déclencher les événements pour les touches normales seulement HOME et BACK par exemple.

J'ai vu parler de l'utilisation d'un TextWatcher mais ce n'est pas la même chose que la gestion des événements clés brutes.

Il semble y avoir un certain nombre de demi-solutions ici sur SO. En espérant que vous pouvez aider à effacer les brumes de la confusion ...

+0

Le guide dev Android est une aide ... http://developer.android.com/guide/topics/ui/ui-events.html – Dizzley

Répondre

2

Vous devez affecter un écouteur de touche non à l'activité, mais plutôt à EditText lui-même.

+0

qui aide - une couche de la brume disparue! – Dizzley

2

C'est ce que je dois écouter les événements de touche BACK ou MENU. Ajoutez simplement cette méthode, sans implémenter d'interface. Je fais ceci dans mon BaseActivity, dont chaque activité hérite.

public boolean onKeyDown(int keyCode, KeyEvent event) { 
    Log.d(NAME, "Key pressed"); 

    switch (keyCode) { 
    case KeyEvent.KEYCODE_BACK: 
     Log.d(NAME, "Back pressed"); 
     // IGNORE back key!! 
     return true; 
     /* Muestra el Menú de Opciones */ 
    case KeyEvent.KEYCODE_MENU: 
     Intent menu = new Intent(this, Menu.class); 

     // start activity 
     startActivity(menu); 
     return true; 
    } 

    return super.onKeyDown(keyCode, event); 
} 

PS: Je déconseille fortement d'ignorer la touche de retour.

+0

Ouais - MENU et BACK fonctionnent bien mais KEYCODE_0, KEYCODE_1 ... et KEYCODE_ENTER ne se déclenchent pas. Je vois le code pour onEditorAction qui réagit à ENTRÉE mais dois-je piéger cela séparément? Désolé si je vous ai dérouté. Je pense que votre code est un bon début ... Vous devez tenir compte des répétitions, des annulations, des longues pressions etc. (selon la version du système d'exploitation). Toujours à la recherche d'un pointeur vers une discussion complète. – Dizzley

+0

Les opérations IME ne sont généralement pas des événements clés bruts; ils sont des opérations d'édition sur une InputConnection qui a été extraite de la vue de mise au point actuelle. (TextView/EditText a une implémentation pour éditer son texte). Vous pouvez obtenir des événements bruts * à la place * en mettant l'accent sur une vue qui ne fournit pas de InputConnection ... cependant, cela limitera considérablement la fonctionnalité du clavier. – hackbod

1

Par exemple:

myEditText.setOnKeyListener(new OnKeyListener() { 
    public boolean onKey(View v, int keyCode, KeyEvent event) { 
     if (event.getAction() == KeyEvent.ACTION_DOWN) 
      if (keyCode == KeyEvent.KEYCODE_DPAD_CENTER){ 
       //your code here 
      } 
     return false; 
    } 
});