web-dev-qa-db-fra.com

Android: Comment empêcher le clavier logiciel de repousser ma vue?

J'ai un tiroir coulissant vertical au bas de mon application. Lorsque le clavier logiciel s'ouvre, il pousse la languette du tiroir vers le haut pour le placer au sommet du clavier. En fait, je souhaite qu’il reste en bas de l’écran et devienne masqué lorsque le clavier est affiché. 

Quelqu'un d'autre se heurte à ce problème? Savoir comment le réparer?

306
Christopher Perry

Vous pouvez simplement changer le windowSoftInputModeflag de votre activité en adjustPan dans votre fichier AndroidMainfest.xml dans votre balise d'activité.

Consultez la documentation officielle pour plus d'informations.

<activity
   ...
   Android:windowSoftInputMode="adjustPan"> 
</activity>
530

Aucune des réponses n'a fonctionné pour moi, mais cela a fait le tour:

Android:windowSoftInputMode="adjustNothing"
140
Daniel Douglas

Dans mon cas, la raison pour laquelle les boutons ont été relevés était parce que la vue au-dessus d’eux était une ScrollView et elle s’est effondrée lorsque les boutons ont été relevés au-dessus du clavier, quelle que soit la valeur de Android:windowSoftInputMode que j’ai paramétrée.

J'ai été en mesure d'éviter que la dernière rangée de boutons ne soit poussée par le clavier virtuel en définissant Android:isScrollContainer="false" sur la ScrollView située au-dessus des boutons.

72
Artem Russakovskii

Vous pouvez essayer d'ajouter cet attribut de manière dynamique en mettant le code suivant dans la méthode onCreate de votre activité:

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

Cela a fonctionné pour moi, plutôt que:

Android:windowSoftInputMode="adjustPan"

n'a pas.

59
Dom

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

Android:windowSoftInputMode="adjustResize"

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

32
amalBit

Pour faire cela par programme dans un fragment, vous pouvez utiliser le code suivant

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

Placez ceci dans onResume () 

8
ChaturaM

Pour les utilisateurs de xamarin, ajoutez ce code à l'attribut d'activité de la classe MainActivity,

WindowSoftInputMode =Android.Views.SoftInput.AdjustNothing

ou vous pouvez ajouter ce code Window.SetSoftInputMode(Android.Views.SoftInput.AdjustNothing) à la méthode OnCreate de la classe MainActivity.

7
Tushar patel

Pour les futurs lecteurs.

Je voulais un contrôle spécifique sur cette question, alors voici ce que j'ai fait:

Depuis un fragment ou une activité, masquez vos autres vues (inutiles lorsque le clavier est activé), puis restaurez-les pour résoudre ce problème: 

            rootView.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
                @Override
                public void onGlobalLayout() {
                    Rect r = new Rect();
                    rootView.getWindowVisibleDisplayFrame(r);
                    int heightDiff = rootView.getRootView().getHeight() - (r.bottom - r.top);

                    if (heightDiff > 100) { // if more than 100 pixels, its probably a keyboard...
                    //ok now we know the keyboard is up...
                        view_one.setVisibility(View.GONE);
                        view_two.setVisibility(View.GONE);

                    }else{
                    //ok now we know the keyboard is down...
                        view_one.setVisibility(View.VISIBLE);
                        view_two.setVisibility(View.VISIBLE);

                    }
                }
            });
7
Petro

Jusqu'à présent, les réponses ne m'ont pas aidé car j'ai un bouton et un champ textInput (côte à côte) sous le textView qui continuait à être masqué par le clavier, mais cela a résolu mon problème:

Android:windowSoftInputMode="adjustResize"
6
Michael McDowell

Juste une seule ligne à ajouter ...

Ajoutez Android:windowSoftInputMode="stateHidden|adjustPan" dans l'activité requise de votre manifest file.

Je viens d'être résolu :) :) 

6
Sravani

Ajoutez le code suivant à l'activité du fichier Manifest. 

Android:windowSoftInputMode="adjustResize"
5
Jose Kurian
Android:windowSoftInputMode="stateHidden|adjustNothing"

Ce code fonctionne.

4
amyShamna

C'était le meilleur qui a fonctionné pour moi

Android:windowSoftInputMode="adjustNothing"

Essayez le!

4
rajlaxmi_jagdale

Bien, j'ai regardé ces réponses mais dans mon cas, je suis tombé dans le même problème et j'ai trouvé refuge grâce à une solution très pratique et très simple qui consiste à mettre un très petit attribut innocent dans votre balise Scrollview résidant dans votre fichier xml. C'est

Android:isScrollContainer="false"

Bonne chance!

3
Ali Nawaz

Celui-ci a fonctionné pour moi 

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
2
Suresh Pattu

Pour le défilement:

si, après avoir ajouté Android:windowSoftInputMode="stateHidden|adjustPan" dans votre manifeste Android et ne fonctionne toujours pas. 

Cela peut être affecté car, lorsque le clavier apparaît, il apparaît dans une vue de défilement et si votre bouton/un objet ne figure pas dans votre vue de défilement, les objets suivent le clavier et déplacent sa position. 

Vérifiez votre XML où votre bouton est et assurez-vous qu'il est sous votre crochet de défilement de vue et non hors de celui-ci.

J'espère que cela aide. :RÉ 

2
Yils

La fenêtre principale de l'activité ne sera pas redimensionnée pour laisser de la place au clavier virtuel. Au lieu de cela, le contenu de la fenêtre sera automatiquement balayé afin que le focus actuel ne soit jamais masqué par le clavier et que les utilisateurs puissent toujours voir ce qu'ils ont tapé.

Android:windowSoftInputMode="adjustPan"

Cela pourrait être une meilleure solution pour ce que vous désiriez.

2
user3243900

@ manifester dans votre activité: 

Android:windowSoftInputMode="stateAlwaysHidden|adjustPan"
1
Juan Mendez

Essayez d'utiliser ceci:

Android:windowSoftInputMode="stateHidden|adjustPan"
1
Ashish Gautam

Ce code peut vous aider. Utilisez-le dans votre méthode oncreate

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_PAN);
1
Shiv prakash Yadav

Incluez dans votre fichier manifeste sous l’activité que vous souhaitez afficher. Mais assurez-vous de ne pas utiliser Activité plein écran 

Android:windowSoftInputMode="adjustPan"
1
user3419461
getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);

Celui-ci travaille pour moi.

0
Zhang Slardar

Lorsque vous souhaitez masquer la vue lorsque vous ouvrez le clavier.

ajouter ceci dans votre activité dans le fichier manifeste

Android: windowSoftInputMode = "stateHidden | adjustPan" `

0
Hakim Khan

Dans mon cas, j'avais besoin que le clavier reste masqué et juste après le clic sur le bouton, ma disposition devait être ajustée. J'ai donc ajouté cette commande dans le manifeste et elle est devenue parfaitement exacte.

Android:windowSoftInputMode="stateHidden|adjustResize"
0
Rafael Rodrigues