web-dev-qa-db-fra.com

Comment empêcher qu'une barre de navigation inférieure ne soit relevée sur le clavier

Comment puis-je créer un pied de page collant qui ne sera pas déplacé vers le haut avec la vue lorsque le clavier de touche programmable apparaît? 

Vous trouverez ci-dessous un exemple d’image de ma configuration actuelle et de ce que je veux réaliser .. J'ai un scrollview qui contient le contenu de ma page et un affichage linéaire aligné sur le bas du parent qui fait office de barre de navigation.

 Example of what i want it to do

Le problème est que lorsque le clavier apparaît, il affiche toute ma vue, y compris la section de navigation inférieure. Je ne veux pas désactiver la remontée automatique de la vue (en définissant Android:windowSoftInputMode="adjustPan") mais plutôt exclure un seul élément de sa montée, ma barre de navigation inférieure.

J'ai testé le correctif windowSoftInputMode mais il cache le contenu de ma page derrière le clavier. Y a-t-il un moyen de le faire continuer à faire défiler le scrollview mais pas la navigation du bas? Mon autre option était de régler visibility:gone sur le clavier et de le rediffuser sur le clavier, mais cela semble trop compliqué et pas toujours fiable à partir de ce que j'ai lu.

Si quelqu'un a des exemples ou des suggestions, je suis tout ouïe. Merci.

18
Thomas Stein

Soit ajouter ceci comme attribut XML de la barre de défilement

Android: isScrollContainer = "false"

ou ajouter ceci dans la balise d'activité dans Manifest

Android: windowSoftInputMode = "adjustPan"

11
JiratPasuksmit

J'ai essayé beaucoup de solutions trouvées sur SO et en ajoutant seulement Android: windowSoftInputMode = "adjustNothing" dans le manifeste pour que l'activité fonctionne pour moi:

<activity
    Android:name=".MainActivity"
    Android:windowSoftInputMode="adjustNothing">

Mise en page associée:

  <RelativeLayout
     ...
        <Android.support.v4.widget.NestedScrollView
           ...
        </Android.support.v4.widget.NestedScrollView>
        <Android.support.design.widget.BottomNavigationView
             ...
            design:menu="@menu/navigation"/>
    </RelativeLayout>
2
saswanb

Ajoutez simplement cette ligne dans votre onCreate, Lorsque cette option permet de ne pas ajuster la fenêtre pour une méthode de saisie affichée. :

getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_ADJUST_NOTHING);
0
ucMedia

J'ai rencontré un problème assez similaire avec les différences suivantes: a) je n'utilisais pas d'abord une ScrollView et b) l'élément que je ne voulais pas déplacer était une simple TextView.

Voici la réponse que j'ai trouvée: click

Ce que j'ai fait pour le réparer:

  • Utilisez adjustResize
  • Utilisez 4 mises en forme: une entourant, 1 pour l'en-tête, le ScrollView et 1 pour votre "bottom nav"
  • Ne vous fiez pas uniquement à Android:layout_alignParentBottom="true", bien que cela déplace la barre de navigation en bas de l'écran, cela signifie également que le clavier peut la déplacer vers le haut en raison de la fonction "ajuster-redimensionner"
  • De plus, utilisez Android:layout_height="wrap_content" en combinaison avec Android:layout_below="@id/MyScrollView" (pour que la mise en page prenne tout l'espace qu'il peut occuper entre ScrollView et le bas de l'écran) et Android:gravity="bottom" pour tout avoir en bas de la mise en page.
  • Vous pourrez peut-être aussi utiliser Android:layout_height="match_parent" au lieu de Android:layout_alignParentBottom="true" et Android:layout_height="wrap_content" mais je ne l'ai pas complètement testé comme ça.
  • Comme je l'ai dit, la disposition "bottom nav" utilisera tout l'espace disponible au-dessous de ScrollView. Si vous ne le souhaitez pas, par exemple parce que votre "navigation vers le bas" a une couleur différente que vous ne voulez pas voir trop, essayez de créer un RelativeLayout environnant pour "la navigation vers le bas" et une autre mise en page vide à l'intérieur qui puisse pousser la "navigation au fond" vers le bas. ;)
0
Neph