OnKeyListener ne fonctionne pas avec le clavier logiciel (Android)

J'utilise onKeyListener pour obtenir les événements onKey. Cela fonctionne bien avec le clavier normal. Mais cela ne fonctionne pas avec le clavier doux. Je ne peux que monter sur les événements clés pour les numéros et non les alphabets. Existe-t-il des solutions pour résoudre ce problème? Toute aide sera grandement appréciée.

  • Set onClickListener pour l'élément spinner?
  • Android onClick bloquant onFling
  • Android AudioRecord vs. MediaRecorder pour l'enregistrement audio
  • Google Map a signé des erreurs de clé api dans Android
  • Comment passer l'événement onClick à son parent sur Android?
  • Xamarin Android EditText entrer la clé
  • Android, Checkbox listenener en XML?
  • Quelle est la différence entre un auditeur et un récepteur (Android)?
  • Android: jouez le fichier mp3 à partir de la ressource brute sur le clic d'une TextView
  • Android AudioRecord vs. MediaRecorder pour l'enregistrement audio
  • Set onClickListener pour l'élément spinner?
  • Auditeur d'événements personnalisé Android
  • 6 Solutions collect form web for “OnKeyListener ne fonctionne pas avec le clavier logiciel (Android)”

    Je ne crois pas qu'un onKeyListener soit appelé avec le clavier du logiciel. Il a quelque chose à voir avec le clavier du logiciel étant un périphérique IME et les périphériques IME pouvant être autre chose que des claviers. Il semble que l'onKeyListener est à peu près inutile, car il fonctionne uniquement sur les téléphones avec des claviers matériels. J'ai récemment travaillé sur ce problème en utilisant TextWatcher dans le champ EditText de mon activité au lieu d'utiliser OnKeyListener.

    OnKeyListener a fonctionné parfaitement sur Android 1.5 via le clavier doux

    À partir de Android 1.6, les touches de caractère et de numéro ne suivent pas l'événement onKey, mais la touche DEL

    Frustrant

    Cela semble être spécifique au périphérique. Je peux confirmer que cela fonctionne sur le Xoom et l'Acer A100. Cependant, Samsung Galaxy Tab Plus déclenche uniquement l'événement pour les boutons autres que le caractère. (Tous les périphériques exécutant Honeycomb)

    C'est probablement stupide, mais c'est comme ça que fonctionne Android actuellement.

    La documentation indique que les événements clés ne seront propagés que pour les touches de touches matérielles, et non sur les logiciels.

    Les fabricants de périphériques sont en réalité déconseillés de propager des événements de clavier doux à travers des auditeurs clés, même s'il incombe au fabricant d'honorer cela ou de traiter réellement les claviers souples et clairs avec des termes égaux.

    À partir d'Android 4.2.2, le système Android lui-même ne prend pas en charge les événements clés pour les claviers logiciels, de sorte que même les fabricants ne pourront pas choisir leur chemin.

    Donc, la seule option infaillible ici est de mettre en œuvre votre propre IME (clavier doux) et de gérer les frappes vous-même.

    TextWatcher peut être utilisé principalement pour remplacer les auditeurs clés, cependant editText.setText (…); Déclenchera également les événements TextWatcher, donc si l'on s'intéresse aux clés typées seulement, probablement TextWatcher n'est pas non plus une solution.

    Soyez prudent lorsque vous utilisez TextWatcher avec AutocomleteTextView ou EditText. Ne modifiez pas le texte dans le contenu AutocompleteTextView / EditText à partir des événements TextWatcher, sinon vous allez très probablement dans une boucle d'événement / écoute infinie.

    J'espère que cela aide à clarifier les options disponibles, mais malheureusement, il ne fournit pas une solution de travail.

    Décevant que Google ait manqué à cet aspect important de son IU.

    J'ai réussi à le faire en mettant l'auditeur dans sa propre méthode et en l'appelant à nouveau après la première fois. Dans l'appel onCreate I setKeyListenerForEnter ();

    Ensuite, voici la méthode:

    Public void setKeyListenerForEnter () {

    final EditText search_entry = (EditText) findViewById(R.id.search_entry); search_entry.setOnKeyListener(new OnKeyListener() { public boolean onKey(View v, int keyCode, KeyEvent event) { // If the event is a key-down event on the "enter" button if ((event.getAction() == KeyEvent.ACTION_DOWN) && (keyCode == KeyEvent.KEYCODE_ENTER)) { getSearchResults(v); setKeyListenerForEnter(); return true; } return false; } }); } 

    Je ne sais pas si c'est une meilleure solution que la manipulation du clavier IME lui-même, mais c'est une solution.

     setFocusableInTouchMode(true); //Enable soft keyboard on touch for target view setFocusable(true); //Enable hard keyboard to target view 

    Exemple:

     public class CanvasView extends View{ public CanvasView(Context c){ super(c); //enable keyboard setOnKeyListener(new KeyBoard()); setFocusable(true); setFocusableInTouchMode(true); } } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.