434 votes

Android : Comment empêcher le clavier souple de pousser ma vue vers le haut ?

J'ai un tiroir coulissant vertical au bas de mon application. Lorsque le clavier souple s'ouvre, il pousse l'onglet du tiroir vers le haut, de sorte qu'il se trouve au-dessus du clavier. En fait, je veux qu'il reste au bas de l'écran et qu'il soit caché lorsque le clavier est affiché.

Quelqu'un d'autre a rencontré ce problème ? Savez-vous comment le résoudre ?

1 votes

Bonjour, j'ai le même problème avec le drapeau que vous avez utilisé dans le fichier manifeste, pouvez-vous m'aider ?

1 votes

Cette question est dupliquée ici : stackoverflow.com/questions/5516216/

726voto

Alexander Oleynikov Points 4554

Vous pouvez simplement changer le nom de votre activité windowSoftInputMode pour adjustPan dans votre AndroidMainfest.xml dans votre balise d'activité.

Vérifiez le documentation officielle pour plus d'informations.

<activity
   ...
   android:windowSoftInputMode="adjustPan"> 
</activity>

Si la taille de votre conteneur ne change pas, il est probable que la hauteur soit réglée sur "correspondre au parent". Si possible, réglez le parent sur "Wrap Content", ou sur une mise en page à contraintes avec des contraintes en haut et en bas du parent.

Le conteneur parent se rétrécit pour s'adapter à l'espace disponible, il est donc probable que votre contenu doive se trouver dans une vue scolling pour éviter (selon le fabricant du téléphone et la mise en page choisie...)

  1. Le contenu est écrasé
  2. Contenu accroché à l'écran
  3. Le contenu est inaccessible parce qu'il se trouve sous le clavier.

même si la mise en page dans laquelle il se trouve est une mise en page relative ou contrainte, le contenu pourrait présenter des problèmes 1-3.

51 votes

Je ne veux pas que la vue soit panoramique, je veux qu'elle reste statique là où elle est, et que le clavier couvre ce qu'il doit couvrir.

5 votes

Par "panoramique", on entend que la vue défilera pour rendre visible la vue sur laquelle vous tapez. En d'autres termes, si le clavier apparu ne couvrait pas la vue ciblée, celle-ci resterait statique.

19 votes

Je suis confronté au même problème. J'ai fait le drapeau windowSoftInputMode à "adjustPan" dans le fichier manifeast. mais cela ne fonctionne pas. comment le résoudre ?

203voto

Daniel Douglas Points 156

Aucune des réponses n'a fonctionné pour moi, mais celle-ci a fait l'affaire : ajoutez cet attribut à l'attribut activity dans votre AndroidManifest.xml :

<activity
     ...
   android:windowSoftInputMode="adjustNothing"> 
</activity>

6 votes

Le clavier apparaît ainsi en superposition du contenu, sans que la mise en page ait à recalculer sa hauteur.

23 votes

Cela résout le problème du clavier qui pousse le contenu vers le haut, ce qui est ce que moi et l'OP voulions réaliser.

8 votes

En empruntant à @Dom, vous pouvez utiliser getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT‌​_INPUT_ADJUST_NOTHIN‌​G); pour définir cette valeur de manière programmatique

91voto

Artem Russakovskii Points 7341

Dans mon cas, la raison pour laquelle les boutons ont été poussés vers le haut était que la vue au-dessus d'eux était un ScrollView et il s'est effondré avec les boutons poussés au-dessus du clavier quelle que soit la valeur de android:windowSoftInputMode J'étais en train de régler.

J'ai pu éviter que la rangée inférieure de boutons ne soit poussée vers le haut par le clavier souple en définissant les paramètres suivants android:isScrollContainer="false" sur le ScrollView qui se trouve au-dessus des boutons.

2 votes

Mais dans ce cas, le clavier souple couvre une partie de l'écran et il n'y a aucun moyen de faire défiler l'écran vers le bas. Il semble qu'il n'y ait qu'un seul moyen d'empêcher le panneau inférieur d'apparaître en haut du clavier - le cacher lorsque le clavier est ouvert...

1 votes

C'est ici ! Ce réglage est à mon avis très intéressant à remarquer, car c'est le seul moyen que j'ai trouvé pour obtenir les effets de la propriété manquante "adjustNothing" !

0 votes

Pour votre information, ceci s'applique également aux éléments qui contiennent un comportement de défilement, tels que les éléments suivants listview

85voto

Dom Points 86

Vous pouvez essayer d'ajouter cet attribut de manière dynamique, en plaçant le code suivant dans le fichier onCreate méthode de votre activité :

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);

Ça a marché pour moi, mais ça :

android:windowSoftInputMode="adjustPan"

n'a pas fait.

0 votes

Avez-vous ajouté le android:windowSoftInputMode="adjustPan" dans AndroidManifest.xml ?

0 votes

Non, car cela n'a pas vraiment fait de différence pour moi. La première ligne de code a fait le travail :) @HabeebPerwad

0 votes

J'ai ajouté la ligne des secondes dans le fichier AndoidManifest.xml. Je pense qu'après cela seulement, ça a fonctionné. Je viens donc de demander.

44voto

amalBit Points 3406

Ces réponses ici ne m'ont pas aidé. Alors j'ai essayé ceci :

android:windowSoftInputMode="adjustResize"

Cela a marché comme un charme, maintenant l'en-tête de mon application ne disparaît pas. C'est plus lisse.

0 votes

Cela fonctionne presque parfaitement pour moi. Le seul problème est que la barre/rangée de suggestions du clavier masque toujours ma disposition. Avez-vous rencontré un tel problème ?

0 votes

Je n'ai pas rencontré ce problème. @Sufian

0 votes

Je n'avais pas rencontré de problème à l'époque. Maintenant, je ne suis plus sûr. @Sufian

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X