Ich verwende eine Aktivität mit dem Dialog-Design-Set und möchte, dass es im Vollbildmodus angezeigt wird. Ich habe alles Mögliche ausprobiert, sogar den WindowManager durchlaufen, um das Fenster manuell auf volle Breite und Höhe zu erweitern, aber es funktioniert nichts.
Offensichtlich wird ein Dialogfenster (oder eine Aktivität mit dem Dialogdesign) nur entsprechend seinem Inhalt erweitert, aber selbst das funktioniert nicht immer. Ich zeige zum Beispiel einen Fortschrittsbalken-Kreis, für den Breite und Höhe auf FILL_PARENT gesetzt sind (dies gilt auch für den Layout-Container). Der Dialog wird jedoch immer um die viel kleinere Fortschrittsleiste herumgeführt, anstatt den Bildschirm zu füllen.
Es muss eine Möglichkeit geben, etwas Kleines in einem Dialogfenster anzuzeigen, aber es auf die volle Bildschirmgröße auszudehnen, ohne dass der Inhalt ebenfalls geändert wird.
Ich habe die Lösung gefunden:
Führen Sie in Ihrer Aktivität, für die der Theme.Dialog
-Stil festgelegt ist, Folgendes aus:
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}
Es ist wichtig, dass Sie Window.setLayout()
after aufrufen, Sie rufen setContentView()
auf, sonst funktioniert es nicht.
Sie können diese Werte zu Ihrem Style Android hinzufügen: windowMinWidthMajor und Android: windowMinWidthMinor
<style name="Theme_Dialog" parent="Android:Theme.Holo.Dialog">
...
<item name="Android:windowMinWidthMajor">96%</item>
<item name="Android:windowMinWidthMinor">96%</item>
</style>
Die minimale Breite, die das Fenster entlang der Nebenachse des Bildschirms haben darf.
Ich möchte nur 80% des Bildschirms ausfüllen, was mir unten gefallen hat
DisplayMetrics metrics = getResources().getDisplayMetrics();
int screenWidth = (int) (metrics.widthPixels * 0.80);
setContentView(R.layout.mylayout);
getWindow().setLayout(screenWidth, LayoutParams.WRAP_CONTENT); //set below the setContentview
es funktioniert nur, wenn ich das getwindow (). setLayout ... -Zeile unterhalb der setContentView (..)
danke @Matthias
Wickeln Sie Ihr dialog_custom_layout.xml in RelativeLayout anstelle eines anderen Layouts. Das hat bei mir funktioniert.
Für Dialog Dies kann für jemanden hilfreich sein . Ich möchte, dass ein Dialog die gesamte Bildschirmbreite annimmt. viel gesucht, aber nichts brauchbares gefunden. Endlich hat das für mich funktioniert:
mDialog.setContentView(R.layout.my_custom_dialog);
mDialog.getWindow().setBackgroundDrawable(null);
nachdem Sie dies hinzugefügt haben, wird mein Dialog in voller Bildschirmbreite angezeigt.
Die Antwort von Matthias ist meistens richtig, füllt aber immer noch nicht den gesamten Bildschirm aus, da auf jeder Seite eine kleine Polsterung vorliegt (auf @Holmes hingewiesen). Zusätzlich zu seinem Code könnten wir dies durch die Erweiterung des Theme.Dialog-Stils beheben und einige Attribute wie diese hinzufügen.
<style name="MyDialog" parent="@Android:style/Theme.Dialog">
<item name="Android:windowBackground">@Android:color/transparent</item>
<item name="Android:windowNoTitle">true</item>
</style>
Dann deklarieren wir einfach Activity, wobei das Theme auf MyDialog
gesetzt ist:
<activity
Android:name=".FooActivity"
Android:theme="@style/MyDialog" />
Stellen Sie eine Mindestbreite im obersten Layout ein.
Android:minWidth="300dp"
Zum Beispiel:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout Android:orientation="vertical" Android:layout_width="fill_parent" Android:layout_height="fill_parent"
xmlns:Android="http://schemas.Android.com/apk/res/Android" Android:minWidth="300dp">
<!-- Put remaining contents here -->
</LinearLayout>
Diese Antwort ist eine Problemumgehung für Benutzer, die "Theme.AppCompat.Dialog" oder andere "Theme.AppCompat.Dialog" -Nachkommen verwenden wie "Theme.AppCompat.Light.Dialog", "Theme.AppCompat.DayNight.Dialog" ", etc . Ich selbst muss das AppCompat-Dialogfeld verwenden, da ich AppCompatActivity als Erweiterungen für alle meine Aktivitäten verwende. Es gibt ein Problem, das dazu führt, dass der Dialog auf allen Seiten (oben, rechts, unten und links) aufgefüllt wird, wenn die akzeptierte Antwort verwendet wird.
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.your_layout);
getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT);
}
Fügen Sie diesen Code im Stil Ihrer Aktivität hinzu
<style name="DialogActivityTheme" parent="Theme.AppCompat.Dialog">
<item name="windowNoTitle">true</item>
<item name="Android:windowBackground">@null</item>
</style>
Wie Sie vielleicht bemerken, ist das Problem, das die Auffüllung unseres Dialogs erzeugt, "Android: windowBackground", daher mache ich hier den Fensterhintergrund auf null.
Dies wäre hilfreich für jemanden wie mich. Erstellen Sie einen benutzerdefinierten Dialogstil:
<style name="MyDialog" parent="Theme.AppCompat.Light.Dialog">
<item name="windowNoTitle">true</item>
<item name="Android:windowFullscreen">true</item>
<item name="Android:windowIsFloating">false</item>
</style>
In AndroidManifest.xml
Dateisatzdesign für die gewünschte Aktivität:
<activity
Android:name=".CustomDialog"
...
Android:theme="@style/MyDialog"/>
Das ist alles, keine Notwendigkeit, Methoden programmatisch aufzurufen.
In Ihrer Manifestdatei, in der unsere Aktivität definiert ist
<activity
Android:name=".YourPopUpActivity"
Android:theme="@Android:style/Theme.Holo.Dialog" >
</activity>
ohne Aktionsleiste
<activity Android:name=".YourPopUpActivity"
Android:theme="@Android:style/Theme.Holo.Dialog.NoActionBar"/>