Je voudrais ajuster / redimensionner la disposition lorsque le clavier virtuel est activé, comme ci-dessous:
Avant et après:
Quelques ressources trouvées dans SO:
- Comment garder tous les champs et textes visibles pendant que le clavier virtuel est affiché
- Le clavier logiciel Android gâche la disposition lorsqu'il apparaît
- Ajuster la disposition lorsque le clavier virtuel est activé
Mais les questions & réponses sont plutôt ambiguës, voici la question avec une image plus claire de ce que je veux.
Exigences:
- Cela devrait fonctionner sur un téléphone avec toutes les tailles d'écran.
- A noté que la marge / espace de remplissage à «FACEBOOK» et «Inscription à Facebook» a changé avant et après.
- Aucune vue de défilement n'est impliquée.
Theme.AppCompat.Light.NoActionBar.FullScreen
), selon cette réponse -> stackoverflow.com/a/7509285/1307690Réponses:
Il suffit d'ajouter
dans votre AndroidManifest.xml où vous déclarez cette activité particulière et cela ajustera l'option de redimensionnement de la mise en page.
un peu de code source ci-dessous pour la conception de la mise en page
la source
Cette question a été posée il y a quelques années et "Secret Andro Geni" a une bonne explication de base et "tir38" a également fait une bonne tentative sur la solution complète, mais hélas il n'y a pas de solution complète affichée ici. J'ai passé quelques heures à comprendre les choses et voici ma solution complète avec des explications détaillées en bas:
Et dans AndroidManifest.xml , n'oubliez pas de définir:
sur l'
<activity>
étiquette que vous voulez une telle mise en page.Pensées:
J'ai réalisé que ce
RelativeLayout
sont les dispositions qui couvrent tout l'espace disponible et qui sont ensuite redimensionnées lorsque le clavier apparaît.Et ce
LinearLayout
sont des mises en page qui ne sont pas redimensionnées lors du processus de redimensionnement.C'est pourquoi vous devez en avoir 1
RelativeLayout
immédiatement aprèsScrollView
pour couvrir tout l'espace d'écran disponible. Et vous devez avoir unLinearLayout
intérieur pourRelativeLayout
que votre intérieur soit écrasé lorsque le redimensionnement se produit. Un bon exemple est "headerLayout". S'il n'y avait pas de contenu à l'LinearLayout
intérieur, leRelativeLayout
texte "facebook" serait écrasé et ne serait pas affiché.Dans les images de connexion "facebook" publiées dans la question, j'ai également remarqué que toute la partie de connexion (mainLayout) est centrée verticalement par rapport à tout l'écran, d'où l'attribut:
sur la
LinearLayout
mise en page. Et parce que mainLayout est à l'intérieur d'un,LinearLayout
cela signifie que cette partie n'est pas redimensionnée (voir à nouveau l'image en question).la source
android:layout_alignParentBottom="true"
. Cela le fait coller au fond.android:layout_marginBottom="15dp"
à footerLayout , puis à RelativeLayout qui contient textView2 et helpButton . Dans les deux cas, helpButton est écrasé (même sans l'attribut marginBottom). En aucun cas, editText1 ou editText2 ne sont jamais écrasés, car ils sont à l'intérieur d'un LinearLayout . Avez-vous peut-être défini une marge sur une autre mise en page (pas seulement footerLayout )? Essayez à partir de zéro si vous n'allez nulle part! Vous pouvez également jouer avec l'android:windowSoftInputMode
attribut dans AndroidManifest.Ajoutez cette ligne dans votre manifeste où votre activité est appelée
ou
vous pouvez ajouter cette ligne dans votre
onCreate
la source
adjustPan
etadjustResize
. Ce sont des modes différents. Pour en savoir plus, cliquez ici: stackoverflow.com/a/17410528/1738090 Et ici: developer.android.com/guide/topics/manifest/activity-elementLe développeur Android a la bonne réponse, mais le code source fourni est assez détaillé et n'implémente pas réellement le modèle décrit dans le diagramme.
Voici un meilleur modèle:
C'est à vous de décider quelles vues vous utilisez pour les parties "défilement" et "pied de page". Sachez également que vous avez probablement de régler le
ScrollView
s fillViewPort .la source
LinearLayout
s au lieu du cadre et du relatif, mais toutes les vues sont toujours au-dessus l'une de l'autre.Cela peut fonctionner pour tout type de mise en page.
par exemple:
et
par exemple:
la source
Cela permet d'afficher toute disposition voulue précédemment masquée par le clavier.
Ajoutez ceci à la balise d'activité dans AndroidManifest.xml
Entourez votre vue racine avec un ScrollView, de préférence avec des barres de défilement = aucun. Le ScrollView ne changera correctement rien avec votre mise en page sauf être utilisé pour résoudre ce problème.
Et puis définissez fitsSystemWindows = "true" sur la vue que vous souhaitez afficher entièrement au-dessus du clavier. Cela rendra votre EditText visible au-dessus du clavier, et permettra de faire défiler les parties sous le EditText mais dans la vue avec fitSystemWindows = "true".
Par exemple:
Si vous souhaitez afficher la partie complète de la vue fitSystemWindows = "true" au-dessus du clavier au moment où le clavier apparaît, vous aurez besoin d'un code pour faire défiler la vue vers le bas:
Exemple de mise en page complète:
la source
android:fitsSystemWindows="true"
est ce qui m'a donné les résultats souhaités que je voulais ... merciPour ceux qui utilisent ConstraintLayout ,
android:windowSoftInputMode="adjustPan|adjustResize"
ne fonctionnera pas.Ce que vous pouvez faire, c'est utiliser un écouteur de clavier logiciel , définir les contraintes des vues de bas en bas des vues supérieures, puis définir un biais vertical pour chaque vue (sous forme de pourcentage de position entre les contraintes) à une ligne de guidage horizontale (également positionnée par pourcentage , mais au parent).
Pour chaque vue, il suffit de changer
app:layout_constraintBottom_toBottomOf
le@+id/guideline
moment où le clavier est affiché , par programmation bien sûr.En général, un clavier virtuel ne prend pas plus de 50% de la hauteur de l'écran. Ainsi, vous pouvez définir la ligne directrice à 0,5.
Maintenant, par programme, lorsque le clavier n'est pas affiché , nous pouvons
app:layout_constraintBottom_toBottomOf
remettre tout le dos au parent, vice-versa.Appelez cette méthode:
L'important est d'être sûr de régler la polarisation verticale de manière à ce qu'elle soit correctement mise à l'échelle lorsque le clavier est affiché et non affiché.
la source
De nombreuses réponses sont justes. Dans
AndroidManifest
j'ai écrit:Dans mon cas, j'ai ajouté un thème dans
styles.xml
, mais vous pouvez utiliser le vôtre:J'ai remarqué que si j'utilise un thème plein écran, le redimensionnement ne se produit pas:
Aussi dans mon cas
adjustResize
fonctionne, maisadjustPan
ne le fait pas.Pour les mises en page plein écran, consultez une solution de contournement dans Android Comment régler la mise en page en mode plein écran lorsque le clavier logiciel est visible ou dans https://gist.github.com/grennis/2e3cd5f7a9238c59861015ce0a7c5584 .
Aussi https://medium.com/@sandeeptengale/problem-solved-3-android-full-screen-view-translucent-scrollview-adjustresize-keyboard-b0547c7ced32 fonctionne, mais c'est StatusBar est transparent, donc batterie, horloge, Wi- Les icônes Fi sont visibles.
Si vous créez une activité avec Fichier> Nouveau> Activité> Activité plein écran, où dans le code est utilisé:
vous n'obtiendrez pas non plus de résultat. Vous pouvez utiliser
android:fitsSystemWindows="true"
dans un conteneur racine, mais StatusBar apparaît. Utilisez donc des solutions de contournement à partir du premier lien.la source
Dans mon cas, cela a aidé.
main_layout.xml
Utilisez ceci dans le
manifest
fichierMaintenant la partie la plus importante! Utilisez un thème comme celui-ci dans la balise
Activity
ouApplication
.Et le thème prend comme ça
Il me manquait donc le thème. Ce qui m'a frustré toute la journée.
la source
Vous pouvez simplement définir ces options dans le fichier AndroidManifest.xml.
L'utilisation de
adjustPan
n'est pas recommandée par Google car l'utilisateur devra peut-être fermer le clavier pour voir tous les champs de saisie.Plus d'informations: Manifeste d'application Android
la source
Pour moi, cela a fonctionné avec cette ligne de code:
Mettez-le simplement dans la méthode onCreate. Meilleur!
la source
Ajoutez cette ligne dans le fichier Manifiest:
la source
J'utilise ce cadre de classe Extended Et quand j'ai besoin de recalculer la taille de la hauteur onLayout, je remplace onmeasure et soustrait keyboardHeight en utilisant getKeyboardHeight ()
Mon cadre de création qui doit être redimensionné avec le clavier logiciel
SizeNotifierFrameLayout
la source
Ce code fonctionne pour moi. Lorsque le clavier apparaît, vous pouvez faire défiler l'écran
Dans AndroidManifest.xml
activity_sign_up.xml
round_border_edittext.xml
btn_blue_selector.xml
la source
Dans Xamarin, inscrivez-vous ci-dessous le code de votre activité
J'ai utilisé une disposition relative si vous utilisez une disposition de contrainte, le code ci-dessus fonctionnera avec le code ci-dessous
la source
Dans Kotlin ou dans ConstraintLayout, il vous suffit d'ajouter:
android:windowSoftInputMode="stateHidden|adjustResize"
OU
android:windowSoftInputMode="stateVisible|adjustResize"
Vous pouvez définir l'état dont vous avez besoin après le lancement de l'activité à partir du manifeste.
dans votre
AndroidManifest.xml
comme ça:la source