Selon le développeur de la plateforme Android Dianne Hackborn dans ce post de groupe de discussion, Dialogs définit la largeur et la hauteur de la disposition de haut niveau de leur fenêtre sur WRAP_CONTENT
. Pour agrandir la boîte de dialogue, vous pouvez définir ces paramètres surMATCH_PARENT
.
Code de démonstration:
AlertDialog.Builder adb = new AlertDialog.Builder(this);
Dialog d = adb.setView(new View(this)).create();
// (That new View is just there to have something inside the dialog that can grow big enough to cover the whole screen.)
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(d.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
d.show();
d.getWindow().setAttributes(lp);
Notez que les attributs sont définis une fois la boîte de dialogue affichée. Le système est capricieux quand ils sont définis. (Je suppose que le moteur de disposition doit les définir la première fois que la boîte de dialogue est affichée, ou quelque chose du genre.)
Il serait préférable de le faire en étendant Theme.Dialog, alors vous n'auriez pas à jouer à un jeu de devinettes sur le moment d'appeler setAttributes. (Bien que ce soit un peu plus de travail que la boîte de dialogue adopte automatiquement un thème clair ou sombre approprié, ou le thème Honeycomb Holo. Cela peut être fait selon http://developer.android.com/guide/topics/ui/themes. html # SelectATheme )
Essayez d'envelopper votre disposition de boîte de dialogue personnalisée dans
RelativeLayout
au lieu deLinearLayout
. Cela a fonctionné pour moi.la source
La spécification de FILL_PARENT dans la fenêtre de dialogue, comme d'autres l'ont suggéré, n'a pas fonctionné pour moi (sur Android 4.0.4), car elle a simplement étiré l'arrière-plan de la boîte de dialogue noire pour remplir tout l'écran.
Ce qui fonctionne bien, c'est d'utiliser la valeur d'affichage minimale, mais de la spécifier dans le code, de sorte que la boîte de dialogue occupe 90% de l'écran.
Alors:
En règle générale, seul le réglage de la largeur devrait être suffisant dans la plupart des cas.
la source
Définissez
android:minWidth
etandroid:minHeight
dans votre vue personnalisée xml. Ceux-ci peuvent forcer l'alerte à ne pas simplement envelopper la taille du contenu. Utiliser une vue comme celle-ci devrait le faire:la source
Encore plus simple:
la source
onCreate
après la rotation du périphérique. Dans ce cas, nous ne pouvons pas compter sur la largeur / hauteur de quoi que ce soit dans la mise en page, car il n'a pas encore été créé; mais la largeur / hauteur physique de l'appareil est toujours disponible.ViewGroup.LayoutParams.WRAP_CONTENT
comme l'un des paramètresla source
FILL_PARENT
par une largeur calculée comme 90% de la largeur de l'affichage actuel. Mais j'aime la réponse car elle est plus facile que les autres.Toutes les autres réponses ici ont du sens, mais elles ne répondaient pas aux besoins de Fabian. Voici ma solution. Ce n'est peut-être pas la solution parfaite, mais cela fonctionne pour moi. Il affiche une boîte de dialogue qui est en plein écran mais vous pouvez spécifier un remplissage en haut, en bas, à gauche ou à droite.
Comme vous pouvez le voir, j'ai Android: paddingTop = 20dp est fondamentalement ce dont vous avez besoin. L' androïde: windowBackground = @ color / Black0Percent n'est qu'un code couleur déclaré sur mon color.xml
Ce code couleur sert simplement de modèle pour remplacer l'arrière-plan de la fenêtre par défaut de la boîte de dialogue par une couleur de transparence 0%.
Enfin, voici notre boîte de dialogue qui définit une vue personnalisée qui utilise notre dialog.xml:
Conclusion: j'ai essayé de remplacer le thème de la boîte de dialogue dans le styles.xml nommé CustomDialog. Il remplace la disposition de la fenêtre de dialogue et me donne la possibilité de définir un remplissage et de changer l'opacité de l'arrière-plan. Ce n'est peut-être pas la solution parfaite, mais j'espère que cela vous aidera .. :)
la source
DialogFragment
) vient quand vous le faites:Dialog customDialog = new Dialog(context, STYLE);
merci, VRAIMENT, merci.Vous pouvez utiliser le pourcentage pour la largeur de la fenêtre (JUST) des fenêtres.
Regardez cet exemple de Holo Theme:
Tout ce que vous avez à faire est d'étendre ce thème et de changer les valeurs de "Major" et "Minor" à 90% au lieu de 65%.
Cordialement.
la source
Les éléments suivants ont bien fonctionné pour moi:
(note: windowMinWidthMajor / Minor comme suggéré dans les réponses précédentes n'a pas fait l'affaire. Mes boîtes de dialogue changeaient de taille en fonction du contenu)
puis:
la source
Solution avec calcul réel à 90%:
où
getScreenWidth(Activity activity)
est défini ce qui suit (mieux placé dans une classe Utils):la source
Obtenez la largeur de l'appareil:
puis utilisez-le pour créer un dialogue à 90% de l'appareil,
la source
Eh bien, vous devez définir la hauteur et la largeur de votre boîte de dialogue avant de l'afficher (dialog.show ())
alors, faites quelque chose comme ça:
la source
De loin la façon la plus simple à laquelle je puisse penser -
Si votre boîte de dialogue est constituée d'un LinearLayout vertical, ajoutez simplement une vue factice de "remplissage en hauteur", qui occupera toute la hauteur de l'écran.
Par exemple -
Remarquez les
android:weightSum="1"
attributs de LinearLayout et les attributsandroid:layout_weight="1"
de la vue facticela source
Eh bien, vous devez définir la hauteur et la largeur de votre boîte de dialogue avant de l'afficher (dialog.show ())
alors, faites quelque chose comme ça:
En obtenant ce code, j'ai fait quelques changements:
cependant, la taille de la boîte de dialogue peut changer lorsque l'appareil change de position. Peut-être devez-vous gérer vous-même les changements de métriques. PD: peekDecorView, implique que la mise en page dans l'activité est correctement initialisée sinon vous pouvez utiliser
afin d'obtenir la taille de l'écran
la source
Après avoir initialisé votre objet de dialogue et défini la vue du contenu. Faites-le et profitez-en.
(dans le cas où je fixe 90% à la largeur et 70% à la hauteur parce que la largeur à 90% sera sur la barre d'outils)
la source
Ma réponse est basée sur le koma, mais elle ne nécessite pas de remplacer onStart mais uniquement onCreateView qui est presque toujours remplacé par défaut lorsque vous créez de nouveaux fragments.
Je l'ai testé sur Android 5.0.1.
la source
Voici ma variante pour la largeur de la boîte de dialogue personnalisée:
Ainsi, en fonction de l'orientation du périphérique (
ThemeHelper.isPortrait(mContext)
), la largeur de la boîte de dialogue sera de 95% (pour le mode portrait) ou de 65% (pour le paysage). C'est un peu plus que l'auteur a demandé mais cela pourrait être utile à quelqu'un.Vous devez créer une classe qui s'étend de Dialog et mettre ce code dans votre
onCreate(Bundle savedInstanceState)
méthode.Pour la hauteur de la boîte de dialogue, le code devrait être similaire à ceci.
la source
ThemeHelper
? Je n'ai pas cette classe disponible dans mon projet.ThemeHelper
est juste une classe d'aide pour mes besoins. Sa méthodeisPortrait(Context)
retourne si l'orientation de l'écran de l'appareil est portrait ou paysage.la source
Au-dessus de nombreuses réponses sont bonnes, mais aucune n'a fonctionné pleinement pour moi. J'ai donc combiné la réponse de @nmr et obtenu celle-ci.
la source
la source
Si vous utilisez la disposition des contraintes , vous pouvez définir n'importe quelle vue à l'intérieur, pour remplir un pourcentage de l'écran avec:
layout_constraintWidth_percent = "0.8"
Ainsi, par exemple, si vous avez un ScrollView à l'intérieur de la boîte de dialogue et que vous souhaitez le définir sur un pourcentage de la hauteur de l'écran. Ce serait comme ça:
J'espère que cela aide quelqu'un !!
la source
Donnez simplement ce thème à AlertDialog
la source
Vous devez utiliser un style @ style.xml tel que CustomDialog pour afficher la boîte de dialogue personnalisable.
et utilisez ce style dans Activity.java comme ceci
et votre custom_dialog.xml devrait à l'intérieur de votre répertoire de disposition
la source
Voici une réponse courte qui a fonctionné pour moi (Testé sur API 8 et API 19).
la source
la source
la source