web-dev-qa-db-fra.com

Android: comment obtenir un événement KeyPress avec un exemple?

je veux obtenir la valeur de la clé lorsque l'utilisateur a appuyé sur n'importe quelle touche et effectuer également une action basée sur la touche enfoncée dans Android.

par exemple. si l'utilisateur a appuyé sur la touche "A", je veux obtenir cette valeur, comparer, faire quelque chose.

14
Hiren Dabhi

La réponse à cette question doit être double. Elle est déterminée par la façon dont la clé a été générée. Si vous avez appuyé sur la clé matérielle, les deux approches décrites ci-dessous sont valides. Si vous avez appuyé sur la touche du logiciel, cela dépend du contexte réel.

1.) Si la touche est le résultat d'une pression sur le clavier virtuel obtenue par un appui long sur la touche Menu:

Vous devez remplacer soigneusement la fonction suivante:

@Override 
public boolean onKeyDown(int keyCode, KeyEvent event) {

    switch (keyCode) {
        case KeyEvent.KEYCODE_A:
        {
            //your Action code
            return true;
        }
    }
    return super.onKeyDown(keyCode, event);
}

2.) Si votre activité contient EditText et que le clavier logiciel a été obtenu à partir de celle-ci, la première approche ne fonctionne pas car l'événement clé a déjà été consommé par EditText. Vous devez utiliser le programme d'écoute modifié par texte:

mMyEditText.addTextChangedListener(new TextWatcher()
{
    public void afterTextChanged(Editable s) 
    {
    }
    public void beforeTextChanged(CharSequence s, int start, int count, int after) 
    {
        /*This method is called to notify you that, within s, the count characters beginning at start are about to be replaced by new text with length after. It is an error to attempt to make changes to s from this callback.*/ 
    }
    public void onTextChanged(CharSequence s, int start, int before, int count) 
    {
    }
);
22
Zelimir

Le code Zelimir fonctionne si votre version de ssoo est jusqu'à 2.3 Si vous avez ce code en cours d'exécution en 2.3, il ne fonctionnera pas du tout, la façon de contrôler les clés d'événements dans toutes les versions de ssoo est avec dispatchKeyEvent ()

@Override
    public boolean dispatchKeyEvent(KeyEvent event) {
        Log.d("hello", String.valueOf(event.getKeyCode()));
        return super.dispatchKeyEvent(event);
    }

Avec cela, vous pouvez contrôler la touche enfoncée dans une vue Web ou où que vous soyez. Le seul bogue est que vous ne pouvez pas contrôler le "bouton d'action" ... je ne sais pas pourquoi.

6
jfcogato

Essayez ceci, cela fonctionne parfaitement bien.

@Override
public boolean onKeyUp (int keyCode, KeyEvent event){
char c = (char) event.getUnicodeChar();
//Do something....
return super.onKeyUp(keyCode, event);
}
3
Mohammed Imran