Android Adjustpan ne fonctionne pas après la première fois

Mon problème: à partir de la deuxième fois que le clavier du logiciel est affiché à l’écran, il masque entièrement mon EditText.

Atsortingbut Android: windowSoftInputMode = “adjustPan” a été spécifié dans le fichier AndroidManifest.xml, mais il ne fonctionne que la première fois.

J’ai la mise en page suivante:

               

Le bouton “showOrHide” affiche / masque le combo “addListText” / “addTextListButton”.

Lorsque EditText est affiché pour la première fois et que je le touche, le clavier virtuel apparaît à l’écran et le combo “addListText” / “addTextListButton” est déplacé correctement. Lorsque je cache le clavier et que je le montre à nouveau, le clavier couvre complètement ma boîte d’édition addListText!

Une idée sur ce qui se passe? Je le teste sur Android 4.2.2.

S’il vous plaît aider! Merci 🙂

edit: J’ai aussi essayé de mettre le premier LinearLayout dans un ScrollView mais ça ne marche pas!

sous-classé EditText et a remplacé la méthode onKeyPreIme (int keyCode, événement KeyEvent) comme ceci:

  @Override public boolean onKeyPreIme(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) { clearFocus(); } return super.onKeyPreIme(keyCode, event); } 

Maintenant, lorsque la touche Back est pressée, le EditText a perdu le focus. En tapotant à nouveau, Adjustpan fonctionnera.

Cela peut sembler un peu bête, mais je me suis heurté à ce problème lorsque j’ai défini la gravité de propriété de mon EditText sur «center_horizontal» ou «center». Le même problème se produit lorsque vous utilisez textAlignment ‘center’. Supprimez-le et vous ne rencontrerez pas le problème de masquage du texte EditText par le clavier la deuxième fois (et les suivantes) lorsque le clavier sortira.

Le problème que vous rencontrez est maintenant un bug de plate-forme connu, tel que décrit ici: https://code.google.com/p/android/issues/detail?id=182191

Le correctif n’est pas répliqué et ne prendra pas effet avant Android N. Jusqu’à ce que Android N soit votre SDK minimum, la solution suivante est une solution de contournement.

Vous pouvez créer une classe personnalisée en étendant EditText et remplacer la méthode onKeyPreIme (int keyCode, événement KeyEvent) comme ceci:

 @Override public boolean onKeyPreIme(int keyCode, KeyEvent event) { if(keyCode == KeyEvent.KEYCODE_BACK) { clearFocus(); } return super.onKeyPreIme(keyCode, event); } 

Vous devez également vous assurer que la mise en page de niveau supérieur a la capacité de se concentrer pour que le focus de EditText puisse être effacé avec succès. Les atsortingbuts suivants peuvent fonctionner pour vous:

 android:descendantFocusability="beforeDescendants" android:focusableInTouchMode="true" 

Maintenant, lorsque la touche Back est pressée, le EditText perd le focus. Ensuite, lorsque vous appuyez à nouveau sur le bouton, Adjustpan fonctionne comme prévu. (Poster comme réponse puisque l’édition a été refusée.)

Voici le code que j’utilisais à l’origine pour résoudre ce problème:

   

Lorsque j’ai retiré la ligne de gravité centrale du EditText, le panoramique a fonctionné:

 android:gravity="center" 

Je l’ai contourné en insérant EditText dans un FrameLayout et en centrant l’intégralité de EditText dans FrameLayout. Le seul problème est que EditText aura au moins la largeur du texte principal, de sorte que les premiers caractères / mots saisis ne seront pas centrés. C’était bien pour moi mais votre kilométrage peut varier 🙂

    

EDIT: cette solution est interrompue si l’utilisateur clique sur le dernier mot du fichier edittext. J’utilise maintenant la solution de contournement onKeyPreIme

Pour moi, le onKeyPreIme ne fonctionne pas. Donc, je remplace plutôt dispatchKeyEventPreIme .

 @Override public boolean dispatchKeyEventPreIme(KeyEvent event) { if(event.getKeyCode() == KeyEvent.KEYCODE_BACK){ clearFocus(); } return super.dispatchKeyEventPreIme(event); } 

Dans EditText android:layout_gravity="center" Créez ce type de problème. Si vous voulez que le texte devienne au centre, alors vous pouvez le faire

Étape 1: pour la mise en page

     

step2: quelque chose par programme

  linerUser.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(mETUserName, 0); mETUserName.requestFocus(); } }); 

Enfin, fonctionne très bien. J’ai trouvé cette solution pour ajuster softKeyboard

Habituellement, le réglage du panoramique ne fonctionne pas après la première utilisation lorsque vous appuyez sur le bouton Retour. Essayez de le faire de la manière suivante:

  @Override public void onBackPressed() { editText.clearFocus(); editText.setCursorVisible(false); } 

J’espère que ça aide quelqu’un

Après avoir essayé de nombreuses solutions dans le fichier Manifest, je l’ai résolu en dessous, adjustPan with Relative layout ne fonctionne pas,

Votre mise en page parent doit être LinearLayout

Espère que cela fait gagner du temps aux gens.