wake-up-neo.net

Wie kann ich ein Dialogfenster mit einem Aktivitätsfenster auf dem Bildschirm anzeigen lassen?

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.

131
Matthias

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.

297
Matthias

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.

55

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

49
Padma Kumar

Wickeln Sie Ihr dialog_custom_layout.xml in RelativeLayout anstelle eines anderen Layouts. Das hat bei mir funktioniert.

9
Ayan

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.

7
Rahul Sharma

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" />
2
DYS

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>
2
roy mathew

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.

1
HendraWD

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. 

1
Stanojkovic

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"/>
0
Makvin