adjustPan n’empêche pas le clavier de couvrir EditText

J’essaie de créer un écran de discussion assez basique avec un ListView affichant le texte et un EditText en bas et un bouton “Envoyer” à droite de EditText. Tout est fonctionnel, mais quand je clique sur EditText, le clavier virtuel le couvre. L’écran se déploie un peu mais pas assez pour être visible au-dessus du clavier. J’ai le tag “adjustPan” dans mon manifeste et j’ai aussi essayé le tag “adjustResize” en vain. Je suppose que cela a quelque chose à voir avec la façon dont ma mise en page est configurée, mais honnêtement, je n’ai aucune idée. S’il vous plaît aider!

Disposition actuelle …

     

Après avoir beaucoup cherché, apparemment c’est ce que j’appelle un bug. Si vous utilisez la balise plein écran (pour supprimer la barre d’état de l’activité), vous ne pouvez pas utiliser “adjustResize” sans encapsuler l’activité dans un ScrollView. Malheureusement pour moi, j’utilise un ListView qui créerait encore un autre problème. J’en ai marre de jouer avec et je vais probablement abandonner le plein écran sur cette activité.

Dans votre fichier manifeste, vous devez définir la propriété android:windowSoftInputMode appropriée. Cet atsortingbut est valide depuis l’API 3.

   

Les options sont: http://developer.android.com/guide/topics/manifest/activity-element.html#wsoft

  • stateUnspecified L’état du clavier logiciel (qu’il soit masqué ou visible) n’est pas spécifié. Le système choisira un état approprié ou s’appuiera sur les parameters du thème. C’est le paramètre par défaut pour le comportement du clavier logiciel.
  • stateUnchanged Le clavier logiciel est conservé dans l’état où il se trouvait, qu’il soit visible ou masqué, lorsque l’activité est mise en évidence.
  • “stateHidden” Le clavier logiciel est masqué lorsque l’utilisateur choisit l’activité – c’est-à-dire lorsque l’utilisateur navigue vers l’activité, plutôt que de revenir en arrière en raison d’une autre activité.
  • stateAlwaysHidden Le clavier logiciel est toujours masqué lorsque la fenêtre principale de l’activité a le focus de saisie.
  • stateVisible Le clavier logiciel est visible lorsque cela est normalement approprié (lorsque l’utilisateur navigue vers la fenêtre principale de l’activité).
  • stateAlwaysVisible Le clavier virtuel est rendu visible lorsque l’utilisateur choisit l’activité – c’est-à-dire lorsque l’utilisateur navigue vers l’activité de manière affirmative, plutôt que d’y revenir en raison d’une autre activité.
  • adjustUnspecified Il n’est pas spécifié si la fenêtre principale de l’activité se redimensionne pour laisser de la place au clavier virtuel ou si le contenu de la fenêtre doit être visible à l’écran. Le système sélectionne automatiquement l’un de ces modes selon que le contenu de la fenêtre possède des vues de mise en page pouvant faire défiler leur contenu. S’il existe une telle vue, la fenêtre sera redimensionnée, en supposant que le défilement peut rendre tous les contenus de la fenêtre visibles dans une zone plus petite. C’est le paramètre par défaut pour le comportement de la fenêtre principale.
  • adjustResize La fenêtre principale de l’activité est toujours redimensionnée pour faire place au clavier virtuel à l’écran.
  • adjustPan La fenêtre principale de l’activité n’est pas redimensionnée pour laisser la place au clavier logiciel . Au contraire, le contenu de la fenêtre est automatiquement déphasé de sorte que le focus actuel ne soit jamais masqué par le clavier et que les utilisateurs peuvent toujours voir ce qu’ils tapent. Ceci est généralement moins souhaitable que le redimensionnement, car l’utilisateur peut avoir besoin de fermer le clavier logiciel pour accéder aux parties obscures de la fenêtre et interagir avec celles-ci.

Si vous définissez android:windowSoftInputMode="adjustResize" pour une activité dans le manifeste, un ScrollView (ou d’autres ViewGroup réductibles) se rétrécira pour prendre en charge le clavier logiciel. Mais si vous définissez android:windowFullscreen="true" dans le thème de l’activité, alors ScrollView ne rétrécira pas car il est obligé de remplir tout l’écran. Cependant, si vous définissez android:fitsSystemWindows="false" dans votre thème, ajusterResize ne fonctionnera pas

Je l’ai eu dans mon AndroidManifest. Cela a adjustPan l’ adjustPan de fonctionner correctement. J’ai enlevé le bloc ci-dessous et tout fonctionne à nouveau correctement.

  

Voici une solution de contournement que j’ai trouvée. Ouvrez le editText problématique et appuyez sur la touche RETURN. Notez que cela déplace le editText plus près de la position que vous visez.

Donc, bien que piraté, vous pouvez essentiellement utiliser une nouvelle ligne en haut du fichier edittext.

Cela semble également fonctionner en utilisant une nouvelle ligne en bas, mais vous devrez utiliser un délai pour ne pas append la nouvelle ligne tant que le clavier souple ne sera pas en place.

Remarque Je n’ai que ce problème sur certains téléphones (DroidX).

 if (android.os.Build.MODEL.equals("DROIDX")) { inputEt.setOnFocusChangeListener(new OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { Ssortingng text = inputEt.getText().toSsortingng(); text = "\n\n" + text.sortingm(); inputEt.setText(text); inputEt.setSelection(text.length()); } }); } 

Essayez d’append android:windowSoftInputMode="adjustResize|stateVisible|stateAlwaysHidden" dans votre manifeste.

Vous pouvez essayer les parameters suivants: