Frage

Ich habe eine Aktivität namens namens whereActity Das hat auch Kinderdialoge. Jetzt möchte ich diese Aktivität als Dialog für eine andere Aktivität anzeigen.

Wie kann ich das machen?

enter image description here

War es hilfreich?

Lösung

Um die Aktivität als Dialog zu starten, habe ich es so definiert in AndroidManifest.xml:

<activity android:theme="@android:style/Theme.Dialog" />

Verwenden Sie diese Eigenschaft in Ihrem activity Tag, um zu vermeiden, dass Ihr Dialog in der kürzlich verwendeten Apps -Liste angezeigt wird

android:excludeFromRecents="true"

Wenn Sie verhindern möchten, dass Ihr Dialog / Aktivität zerstört wird, wenn der Benutzer außerhalb des Dialogfelds klickt:

Nach setContentView() in deiner Activity verwenden:

this.setFinishOnTouchOutside(false);

Jetzt, wenn ich anrufe startActivity() Es wird als Dialogfeld angezeigt, wobei die vorherige Aktivität angezeigt wird, wenn der Benutzer die Rücktaste zurückdrückt.

Beachten Sie, dass wenn Sie verwenden ActionBarActivity (oder AppCompat -Thema) müssen Sie verwenden @style/Theme.AppCompat.Dialog stattdessen.

Andere Tipps

Verwenden Sie diesen Code, damit die Dialogaktivität nicht geschlossen wird, wenn der Benutzer außerhalb des Dialogfelds berührt:

this.setFinishOnTouchOutside(false);

Benötigt API Level 11

Sie können diesen Stil in Werten/stiles.xml definieren, um einen ehemaligeren Splash durchzuführen:

   <style name="Theme.UserDialog" parent="android:style/Theme.Dialog">
        <item name="android:windowFrame">@null</item>
        <item name="android:windowIsFloating">true</item>
        <item name="android:windowIsTranslucent">true</item>
        <item name="android:windowNoTitle">true</item>
        <item name="android:background">@android:color/transparent</item>
        <item name="android:windowBackground">@drawable/trans</item>
    </style>

Und benutze es AndroidManifest.xml:

   <activity android:name=".SplashActivity"
          android:configChanges="orientation"
          android:screenOrientation="sensor"
          android:theme="@style/Theme.UserDialog">

1 - Sie können dynamisch die gleiche Aktivität wie Dialog- und Vollbildschirm -Aktivität verwenden:

Anruf setTheme(android.R.style.Theme_Dialog) voranrufen setContentView(...) und super.oncreate() in Ihrer Aktivität.

2 - Wenn Sie nicht planen, den Aktivitätsthemenstil zu ändern, den Sie verwenden können

<activity android:theme="@android:style/Theme.Dialog" />

(Wie von @faisal khan erwähnt)

Wenn Sie AppCompat -Version benötigen

style.xml

    <!-- Base application theme. -->
    <style name="AppDialogTheme" parent="Theme.AppCompat.Light.Dialog">
        <!-- Customize your theme here. -->
        <item name="windowActionBar">false</item>
        <item name="android:windowNoTitle">true</item>
    </style>

yourmanifest.xml

    <activity
          android:name=".MyActivity"
          android:label="@string/title"
          android:theme="@style/AppDialogTheme">
    </activity>

Wenn Ihre Aktivität als Dialogfeld gerendert wird, fügen Sie einfach eine Schaltfläche zum XML Ihrer Aktivität hinzu.

<Button
    android:id="@+id/close_button"
    android:layout_width="fill_parent"
    android:layout_height="wrap_content"
    android:text="Dismiss" />

Fügen Sie dann einen Klick -Listener in den Java -Code Ihrer Aktivität hinzu. Rufen Sie einfach im Hörer an finish()

Button close_button = (Button) findViewById(R.id.close_button);
close_button.setOnClickListener(new OnClickListener() {
    @Override
    public void onClick(View v) {
        finish();
    }
});

Dies sollte Ihren Dialog entlassen und Sie zur Anrufaktivität zurückkehren.

Wenn Sie den Aktivitätsheader entfernen und eine benutzerdefinierte Ansicht für den Dialogfeld angeben möchten, fügen Sie dem Aktivitätsblock Ihres Manifest Folgendes hinzu

android:theme="@style/Base.Theme.AppCompat.Dialog"

und entwerfen Sie Ihre Aktivität_Layout mit Ihrer gewünschten Ansicht

Legen Sie das Thema in Ihrer Android -Manifestdatei fest.

<activity android:name=".LoginActivity"
            android:theme="@android:style/Theme.Dialog"/>

Und stellen Sie den Dialogstatus auf, um zu beenden.

this.setFinishOnTouchOutside(false);
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top