Je veux attraper la pression de n'importe quelle touche du clavier logiciel. Je ne veux pas de EditView ou TextView dans mon activité, l'événement doit être géré à partir d'une vue étendue à l'intérieur de mon activité.
Je viens d'essayer ceci:
1) Ignorez la méthode onKeyUp(int keyCode, KeyEvent event)
Activity. Cela ne fonctionne pas avec softkeybord, il attrape juste quelques touches.
2) Créer ma OnKeyListener
et enregistrer celle qui contient une OnTouchListener
enregistrée et active dans ma vue. Cela ne fonctionne pas du tout avec softkeyboar.
3) Remplacez la méthode onKeyUp(int keyCode, KeyEvent event)
View. Cela ne fonctionne pas du tout si je règle mon OnKeyListener ni si je ne le configure pas.
4) Avec l'objet InputMethodManager
Appelez la méthode showSoftInput
et transmettez-lui ma vue. Cela ne fonctionne pas non plus pour relancer le clavier, en effet je dois appeler toggleSoftInput
; ni pour attraper les événements clés.
J'ai tout testé uniquement dans l'émulateur mais je pense que ça suffit. Pourquoi est-ce si compliqué de prendre un simple événement de clavier depuis un clavier?
Essayez d’utiliser dispatchKeyEvent(KeyEvent event)
dans votre Activity
@Override
public boolean dispatchKeyEvent(KeyEvent event) {
Log.i("key pressed", String.valueOf(event.getKeyCode()));
return super.dispatchKeyEvent(event);
}
Avec la touche vasart je peux obtenir l’événement KeyPress. Pour rendre le code d'activation imprimable, j'ai utilisé la fonction getUnicodeChar en lui passant l'état du bouton méta, puis simplement une conversion de caractères résolvant le problème.
C'est le code de travail :
@Override
public boolean dispatchKeyEvent(KeyEvent KEvent)
{
int keyaction = KEvent.getAction();
if(keyaction == KeyEvent.ACTION_DOWN)
{
int keycode = KEvent.getKeyCode();
int keyunicode = KEvent.getUnicodeChar(KEvent.getMetaState() );
char character = (char) keyunicode;
System.out.println("DEBUG MESSAGE KEY=" + character + " KEYCODE=" + keycode);
}
return super.dispatchKeyEvent(KEvent);
}
Bien sûr, cela ne fonctionne qu'avec le caractère ASCII.
Il n’existe aucune option permettant de gérer les événements de frappe sur un clavier virtuel (un clavier à l’écran) uniquement à partir d’un clavier matériel.
pour plus de détails: Gestion des actions au clavier
Lorsque le clavier est ouvert en activité, votre activité devient réellement au premier plan .......... Tous les TextArea ou TextField ont leur propre mécanisme permettant de faire entrer le clavier à l'écran à l'aide du clavier à l'écran ... Assurez-vous que vous définissez dans le fichier AndroidManifest sous votre activité Android: windowSoftInputMode = "stateAlwaysVisible", puis onkeyDown () fonctionnera et fonctionnera pour moi ...