Déplacez mise en place lorsque le clavier virtuel est affiché
Je suis en train de régler la mise en page lorsque le clavier apparaît après une modification de texte reçoit le focus. Pour l'instant, si j'ai beaucoup d'éditer le texte et le clavier s'affiche, la dernière édition de texte sont cachés et je ne peux pas faire défiler jusqu'à.
C'est ainsi que ma mise en page est bâtie:
Modèle:
<LinearLayout>
<LinearLayout>
//header 1
</LinearLayout>
<LinearLayout>
//header 1
</LinearLayout>
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="0dip"
android:layout_weight="1"
android:orientation="vertical">
//where I inflate view_1
</LinearLayout>
<LinearLayout>
//footer
</LinearLayout>
</LinearLayout>
Vue (view_1):
<ScrollView
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:focusable="true"
android:focusableInTouchMode="true">
<LinearLayout>
//...
</LinearLayout>
<LinearLayout>
//...
</LinearLayout>
<LinearLayout>
<TextView/>
<EditText/>
<TextView/>
<EditText/>
<TextView/>
<EditText/>
<TextView/>
<EditText/>
</LinearLayout>
</LinearLayout>
</ScrollView>
J'ai déjà essayer toutes sortes de combinaisons de android:windowSoftInputMode
(sur manifest.xml et par programme). J'ai tenté de android:isScrollContainer="false"
sur le défilement de l'affichage, mais rien.
J'ai aussi essayé cette réponse, mettant GlobalLayoutListener dans ma défilement de l'affichage, mais le onGlobalLayout n'est pas appelé lorsque le clavier apparaît. Et le isKeyboardShown
est toujours faux.
OriginalL'auteur lpfx | 2015-01-19
Vous devez vous connecter pour publier un commentaire.
La meilleure solution que j'ai trouvé est d'ajouter
adjustpan
propriété dans l'activité<> dans la balise manifest.xml fichier .Ce doit être marqué comme réponse, il a travaillé pour moi (:
OriginalL'auteur yehyatt
C'est une réponse tardive, mais il peut être utile pour quelqu'un qui est toujours à la recherche d'une solution alternative. J'ai créé un custom
ViewTreeObserver.OnGlobalLayoutListener
qui peuvent s'adapter à votre cas d'utilisation, si vous êtes à la recherche d'un moyen de contrôler la position de laView
que vous voulez vous assurer est visible lorsque le clavier virtuel est affiché. Voici l'essentiel à cette solution.La
OnGlobalLayoutListener
anime les modifications de la vuetranslationY
propriété par déplacement de la vue juste au-dessus du clavier souple limites lorsque le clavier est affiché et retour à l'affichage de la position de départ lorsque le clavier est rejeté. Laissez-moi savoir si vous avez des questions sur l'utilisation.OriginalL'auteur Ryan
Que j'ai fait à ma façon.
J'ai créé une classe qui implémente OnFocusChangeListener pour gérer tous mes EditText:
Puis dans l'activité, j'ai placé l'auditeur pour chaque texte à modifier:
Et pour la dernière édition de texte, j'ai placé un EditorAction listerner pour gérer le bouton "terminer" sur le clavier - pour masquer le clavier et mettre le défilement de l'affichage retourne à sa position initiale:
Et enfin, une façon de gérer lorsque l'utilisateur touche l'extérieur de modifier le texte pour masquer le clavier et mettre le défilement de l'affichage retourne à sa position initiale (trouvé ceci sur le web et changé un peu pour l'adapter à mes besoins):
Je suppose que la hauteur du clavier prend 1/3 de l'écran. Ce n'est pas une solution idéale, mais il a travaillé pour les appareils que j'avais à l'appui. Cela pourrait briser pour de petits écrans. Vous pouvez définir une valeur différente pour elle. PS: mon application est uniquement en mode portrait.
OriginalL'auteur lpfx
Mettre tous vos top code dans
ScrollView
, pas seulementview_1
. Cela vous permet de déplacer tous les parents de mise en page cliquez sur par un enfantEditText
.EDIT:
view_1
dans ce cas ne DOIT PAS contientScrollView
!view_1
est juste l'une des vues de l'application.Je suppose que le clavier ne peut pas se déplace le parent de mise en page pour vous montrer le fond de widgets dans ce cas.
La meilleure solution est de simplifier l'interface. La pire des solutions est le ScrollView dans le ScrollView: stackoverflow.com/a/11554823/3345366
Mon idée est de ne déplacer que la "maquette intérieure". Les en-têtes et pied de page reste fixe et lorsque l'utilisateur appuie sur une modification du texte de
view_1
, seulementview_1
se déplace pour indiquer la modification de texte au-dessus du clavier.Non, il n'a pas aidé 🙁 Tout ce qui est android est tellement aléatoire!
OriginalL'auteur anil
ajouter cette
OriginalL'auteur user196554
Si vous créer de l'Activité à l'aide de Android Studio
Basic Activity
assistant (avecCoordinatorLayout
ettheme="@style/AppTheme.NoActionBar"
), le comportement par défaut est adjustPan, où la première partie de l'activité est de pousser les limites de l'écran et l'EditText est indiqué au-dessus du Clavier. Vous pouvez également le modifier àadjustResize
où la première partie de l'activité est maintenue.Modifier
AndroidManifest.xml
Garder à l'esprit que l'effet et le comportement peut varier légèrement si vous utilisez
Scrolling Activity
, commeNestedScrollView
.https://code.luasoftware.com/tutorials/android/move-layout-when-keyboard-shown/
OriginalL'auteur Desmond Lua
Le code ci-dessous est de travailler pour moi. Juste essayer cet exemple:
Dans manifest.xml ajouter ces lignes:
Déclarer AppTheme dans style.xml selon le thème de votre exigence. Alors si vous n'avez pas besoin de clavier vient tout chargement de la page, vous pouvez ajouter en dessous de la ligne de l'activité:
Heureux De Codage 🙂
OriginalL'auteur Sarojini2064130