Laut der Entwicklerin der Android-Plattform, Dianne Hackborn , haben Dialoge in diesem Diskussionsgruppenbeitrag die Breite und Höhe des Layouts ihres Fensters auf oberster Ebene auf festgelegt WRAP_CONTENT
. Um den Dialog zu vergrößern, können Sie diese Parameter auf einstellen MATCH_PARENT
.
Demo-Code:
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);
Beachten Sie, dass die Attribute festgelegt werden, nachdem der Dialog angezeigt wurde. Das System ist pingelig, wenn sie eingestellt sind. (Ich denke, dass die Layout-Engine sie festlegen muss, wenn der Dialog zum ersten Mal angezeigt wird, oder so.)
Es wäre besser, dies durch Erweitern von Theme.Dialog zu tun, dann müssten Sie kein Ratespiel darüber spielen, wann setAttributes aufgerufen werden soll. (Obwohl es etwas aufwendiger ist, wenn der Dialog automatisch ein geeignetes helles oder dunkles Thema oder das Honeycomb Holo-Thema annimmt. Dies kann gemäß http://developer.android.com/guide/topics/ui/themes erfolgen. html # SelectATheme )
Versuchen Sie, Ihr benutzerdefiniertes Dialoglayout in
RelativeLayout
statt zu verpackenLinearLayout
. Das hat bei mir funktioniert.quelle
Das Angeben von FILL_PARENT im Dialogfenster, wie von anderen vorgeschlagen, funktionierte bei mir nicht (unter Android 4.0.4), da nur der schwarze Dialoghintergrund gestreckt wurde, um den gesamten Bildschirm auszufüllen.
Was gut funktioniert, ist, den minimalen Anzeigewert zu verwenden, ihn jedoch im Code anzugeben, sodass der Dialog 90% des Bildschirms einnimmt.
So:
Im Allgemeinen sollte in den meisten Fällen nur die Einstellung der Breite ausreichen.
quelle
Stellen Sie
android:minWidth
undandroid:minHeight
in Ihrer benutzerdefinierten Ansicht XML. Diese können die Warnung zwingen, nicht nur die Inhaltsgröße einzuschließen. Wenn Sie eine Ansicht wie diese verwenden, sollten Sie Folgendes tun:quelle
Noch einfacher machen Sie dies einfach:
quelle
onCreate
nach der Gerätedrehung neu zu erstellen . In diesem Fall können wir uns nicht auf die Breite / Höhe von irgendetwas im Layout verlassen, da es noch nicht erstellt wurde. Die physische Breite / Höhe des Geräts ist jedoch weiterhin verfügbar.ViewGroup.LayoutParams.WRAP_CONTENT
als einen der Parameterquelle
FILL_PARENT
Breite durch 90% der Breite der aktuellen Anzeige ersetzen . Aber ich mag die Antwort, weil es einfacher ist als die anderen.Alle anderen Antworten hier sind sinnvoll, aber sie entsprachen nicht den Anforderungen von Fabian. Hier ist eine Lösung von mir. Es ist vielleicht nicht die perfekte Lösung, aber es funktioniert für mich. Es wird ein Dialogfeld angezeigt, das im Vollbildmodus angezeigt wird. Sie können jedoch oben, unten, links oder rechts eine Auffüllung festlegen.
Wie Sie sehen können, habe ich dort Android: paddingTop = 20dp ist im Grunde das, was Sie brauchen. Das android: windowBackground = @ color / Black0Percent ist nur ein Farbcode, der in meiner color.xml deklariert ist
Dieser Farbcode dient nur als Dummy, um den Standardfensterhintergrund des Dialogfelds durch eine 0% Transparenzfarbe zu ersetzen.
Schließlich ist hier unser Dialog, der eine benutzerdefinierte Ansicht festlegt, die unsere dialog.xml verwendet:
Fazit: Ich habe versucht, das Thema des Dialogfelds in der Datei styles.xml mit dem Namen CustomDialog zu überschreiben. Es überschreibt das Layout des Dialogfensters und gibt mir die Möglichkeit, eine Auffüllung festzulegen und die Deckkraft des Hintergrunds zu ändern. Es ist vielleicht nicht die perfekte Lösung, aber ich hoffe es hilft dir .. :)
quelle
DialogFragment
), kommt, wenn Sie dies tun:Dialog customDialog = new Dialog(context, STYLE);
Danke, WIRKLICH, danke.Sie können den Prozentsatz für die Dialogbreite von (NUR) Fenstern verwenden.
Schauen Sie sich dieses Beispiel aus dem Holo-Thema an:
Sie müssen dieses Thema nur erweitern und die Werte für "Major" und "Minor" auf 90% anstatt auf 65% ändern.
Grüße.
quelle
Folgendes hat für mich gut funktioniert:
(Hinweis: windowMinWidthMajor / Minor, wie in den vorherigen Antworten vorgeschlagen, hat den Trick nicht ausgeführt. Meine Dialoge haben je nach Inhalt ihre Größe geändert.)
und dann:
quelle
Lösung mit tatsächlicher 90% Berechnung:
Dabei
getScreenWidth(Activity activity)
wird Folgendes definiert (am besten in einer Utils-Klasse):quelle
Holen Sie sich die Gerätebreite:
Verwenden Sie dies dann, um den Dialog zu 90% des Geräts zu machen.
quelle
Nun, Sie müssen vorher die Höhe und Breite Ihres Dialogs einstellen, um dies anzuzeigen (dialog.show ())
Also mach so etwas:
quelle
Mit Abstand der einfachste Weg, den ich mir vorstellen kann -
Wenn Ihr Dialogfeld aus einem vertikalen LinearLayout besteht, fügen Sie einfach eine Dummy-Ansicht "Höhenfüllung" hinzu, die die gesamte Höhe des Bildschirms einnimmt.
Zum Beispiel -
Beachten
android:weightSum="1"
Sie die Attribute in LinearLayout und die Attributeandroid:layout_weight="1"
in der Dummy-Ansichtquelle
Nun, Sie müssen vorher die Höhe und Breite Ihres Dialogs einstellen, um dies anzuzeigen (dialog.show ())
Also mach so etwas:
Als ich diesen Code bekam, nahm ich einige Änderungen vor:
Die Dialoggröße kann sich jedoch ändern, wenn das Gerät seine Position ändert. Möglicherweise müssen Sie selbst vorgehen, wenn sich Metriken ändern. PD: peekDecorView impliziert, dass das Layout in der Aktivität ordnungsgemäß initialisiert wird, andernfalls können Sie es verwenden
um die Bildschirmgröße zu erhalten
quelle
Nachdem Sie Ihr Dialogobjekt initialisiert und die Inhaltsansicht festgelegt haben. Mach das und genieße es.
(In dem Fall setze ich 90% auf Breite und 70% auf Höhe, da Breite 90% über der Symbolleiste liegt.)
quelle
Meine Antwort basiert auf den Komas, muss jedoch nicht onStart überschreiben, sondern nur onCreateView, das beim Erstellen neuer Fragmente fast immer standardmäßig überschrieben wird.
Ich habe es auf Android 5.0.1 getestet.
quelle
Hier ist meine Variante für die Breite des benutzerdefinierten Dialogfelds:
Je nach Ausrichtung des Geräts (
ThemeHelper.isPortrait(mContext)
) beträgt die Breite des Dialogfelds entweder 95% (im Hochformat) oder 65% (im Querformat). Es ist ein bisschen mehr, als der Autor gefragt hat, aber es könnte für jemanden nützlich sein.Sie müssen eine Klasse erstellen, die sich aus Dialog erstreckt, und diesen Code in Ihre
onCreate(Bundle savedInstanceState)
Methode einfügen .Für die Höhe des Dialogfelds sollte der Code ähnlich sein.
quelle
ThemeHelper
? Ich habe diese Klasse in meinem Projekt nicht verfügbar.ThemeHelper
ist nur eine Hilfsklasse für meine Bedürfnisse. Die Methode gibtisPortrait(Context)
zurück, ob die Bildschirmausrichtung des Geräts im Hoch- oder Querformat ist.quelle
Oben sind viele der Antworten gut, aber keine hat für mich voll funktioniert. Also habe ich die Antwort von @nmr kombiniert und diese bekommen.
quelle
quelle
Sie müssen einen style @ style.xml wie CustomDialog verwenden, um den anpassbaren Dialog anzuzeigen.
und verwenden Sie diesen Stil in Activity.java wie folgt
und Ihre custom_dialog.xml sollte sich in Ihrem Layoutverzeichnis befinden
quelle
Wenn Sie das Einschränkungslayout verwenden , können Sie eine beliebige Ansicht darin festlegen, um einen Prozentsatz des Bildschirms mit folgenden Inhalten zu füllen:
layout_constraintWidth_percent = "0.8"
Wenn Sie beispielsweise eine Bildlaufansicht im Dialogfeld haben und diese auf einen Prozentsatz der Bildschirmhöhe festlegen möchten. Es wäre so:
Hoffe es hilft jemandem !!
quelle
Geben Sie dem AlertDialog einfach dieses Thema
quelle
Hier ist eine kurze Antwort, die für mich funktioniert hat (Getestet auf API 8 und API 19).
quelle
quelle
quelle