Comment éviter que le clavier ne pousse ma mise en page?

J’ai un ensemble de boutons de navigation au bas de chaque activité. Dans certaines activités, j’ai besoin d’une vue textuelle de recherche en haut de celui-ci. Cependant, chaque fois que l’utilisateur tape quelque chose dans la vue textuelle, le clavier tactile pousse toujours mes boutons de navigation, même si cela ne bloque pas la vue texte. Cela rend mon interface utilisateur drôle. Comment puis-je forcer mes boutons de navigation à restr statiques là où ils se trouvent sans jamais être poussés par le clavier logiciel? J’ai essayé de définir le windowSoftInputMode de l’activité, mais aucune des configurations ne m’aide.

Aucune suggestion? Merci

J’ai eu le même problème et au début j’ai ajouté:

 

à mon fichier manifeste. Mais cela seul n’a pas résolu le problème. Ensuite, comme mentionné par Artem Russakovskii, j’ai ajouté:

   

dans la vue de défilement.

C’est ce qui a fonctionné pour moi.

Dans mon cas, la raison pour laquelle les boutons ont été enfoncés est que la vue au-dessus était une vue ScrollView et que les boutons étaient enfoncés au-dessus du clavier, quelle que soit la valeur de android:windowSoftInputMode .

J’ai pu éviter que ma rangée inférieure de boutons ne soit soulevée par le clavier

 android:isScrollContainer="false" 

sur le ScrollView qui se trouve au-dessus des boutons.

Pour résoudre ce problème, ajoutez simplement android:windowSoftInputMode="stateVisible|adjustPan à cette activité dans le fichier manifeste Android. Par exemple

  

Pour les futurs lecteurs.

Je voulais un contrôle spécifique sur ce problème, alors c’est ce que j’ai fait:

À partir d’un fragment ou d’une activité, masquez vos autres vues (qui ne sont pas nécessaires lorsque le clavier est en place), 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); } } }); 

windowSoftInputMode déploiera ou redimensionnera votre disposition d’activité. Une chose que vous pouvez faire est d’attacher un écouteur onFocusChanged à votre EditText et lorsque l’utilisateur sélectionne / touche le EditText, vous masquez ou déplacez vos boutons de navigation hors de l’écran. Lorsque EditText perd le focus, vous pouvez replacer les boutons de navigation au bas de l’activité.

J’ai eu le même problème, mais le réglage de windowSoftInputMode n’a pas aidé, et je n’ai pas voulu changer la vue supérieure pour avoir isScrollContainer="false" parce que je voulais qu’elle défile.

Ma solution consistait à définir l’emplacement supérieur des outils de navigation au lieu du bas. J’utilise Titanium, donc je ne sais pas exactement comment cela se traduirait par Android. La définition de l’emplacement supérieur de la vue des outils de navigation a empêché le clavier logiciel de la pousser vers le haut et a plutôt couvert les commandes de navigation comme je le souhaitais.

Résolu en définissant le vilain EditText:

 etSearch = (EditText) view.findViewById(R.id.etSearch); etSearch.setInputType(InputType.TYPE_NULL); etSearch.setOnTouchListener(new OnTouchListener() { @Override public boolean onTouch(View v, MotionEvent event) { etSearch.setInputType(InputType.TYPE_CLASS_TEXT); return false; } });