Comment redimensionner AlertDialog sur le Clavier à l'écran
J'ai un AlertDialog
boîte avec environ 10 contrôles (texte et TextView
) sur elle. Ces contrôles sont dans un ScrollView
avec AlertDialog
, en plus j'ai eu 2 boutons positifs et négatifs. Le problème que j'ai, c'est quand le clavier virtuel apparaît que les deux boutons sont cachés derrière le clavier.
Je cherchais quelque chose comme redessiner fonction de mon point de Vue interne ou de la boîte de dialogue. Ci-dessous la capture d'écran de ce que je suis en train de parler.
Vous devez vous connecter pour publier un commentaire.
Si votre boîte de dialogue est une activité à l'aide de l'un de la boîte de Dialogue thèmes vous pourriez l'effet de ce comportement en définissant le
adjustResize
drapeau de lawindowSoftInputMode
paramètre de l'activité.Je suis en utilisant:
Je pense que vous pouvez toujours utiliser ce drapeau avec régulièrement des boîtes de dialogue, mais je ne suis pas sûr de la façon de l'appliquer. Vous devrez créer votre AlertDialog avec un thème personnalisé qui hérite de la droite le thème parent et aussi des jeux de drapeau, ou vous pourriez avoir à utiliser ContextThemeWrappers et d'autres choses.
Ou peut-être vous pouvez simplement utiliser Fenêtre#setSoftInputMode.
<style name="Theme.MyDialog" parent="@android:style/Theme.Dialog"><item name="android:windowSoftInputMode">adjustResize|stateHidden</item></style>
J'ai trouvé une meilleure façon de gérer cela. Parce que c'est un dialogue, et Donc le code
ne fonctionne pas très bien.
En plus de ce code, vous devez configurer une boîte de dialogue style de cette boîte de dialogue. Le style doit comme ci-dessous:
REMARQUEZ que l'attribut
parent
estTheme.Black.NoTitleBar.Fullscreen
comme une activité de style. et l'attributandroid:windowFullScreen
devrait êtrefalse
.Maintenant, la boîte de dialogue sera redimensionnée lorsque le clavier bascule.
Rien n'a fonctionné pour moi, sauf
adjustPan
que par la documentation
Donc simplement utiliser dans votre onCreate() ou onCreateView() méthode:
Ou tout simplement mettre
android:windowSoftInputMode="adjustPan"
dans le manifeste pour la Activiry dans lequel nous jouons avec les dialogueset l'utilisation
android:windowSoftInputMode="adjustResize|stateHidden"
dans chaque edittext, qui permettent à l'utilisateur de naviguer à la prochaine zone de texte facilement.Point à retenir
Ne jamais utiliser MATCH_PARENT pour faire de la boîte de dialogue plein écran comme
adjustPan
ne fonctionnera pas ici. Si quelqu'un veut faire de la boîte de dialogue à l'écran, il suffit d'utiliser des points jusqu'à 0.96 (pas plus que cela) pour la hauteur, de sorte que le clavier est correctement atteindre à l'edittext. J'ai fait comme ci-dessous :Coup d'oeil, Si je vais utiliser la hauteur totale (MATCH_PARENT) puis soft_keyboard sera squize la boîte de dialogue. Mais si je vais utiliser les points pour la hauteur (ici 0.96 qui est proche de match_parent), puis il fonctionne correctement.
Espère que ça va aider quelqu'un 🙂
Êtes-vous obligé de l'avoir comme un popup? Le popup a l'air tellement grand, que vous voulez juste pour l'avoir comme une activité distincte. En général, les popups sont utilisés pour fournir une brève question ou une déclaration avec quelques options, pas une pleine soufflé formulaire de saisie de données. Puisque vous ne pouvez pas voir beaucoup de choses derrière la grande fenêtre contextuelle, vous n'êtes pas à exposer des contrôles de toute façon.
peut-être que vous n'avez pas besoin de redimensionner la boîte de Dialogue
ajouter android:imeOptions="actionNext" à EditText(tous sauf le dernier) (il va ajouter un bouton "Suivant" pour le clavier - aller à la prochaine EditText)
et ajouter android:imeOptions="actionDone" à la dernière EditText (bouton"Terminé" - cacher le clavier)
maintenant, l'utilisateur doit être en mesure de cliquer sur les boutons
si vous êtes à la création de zones de texte dans le code à utiliser EditText#setImeOptions fonction
HTH
pour afficher le clavier immédiatement et ajuster la taille: