web-dev-qa-db-de.com

Android Aktivität als Dialog

Ich habe eine Aktivität namens whereActity, die auch untergeordnete Dialogfelder enthält. 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

243
d-man

Um die Aktivität als Dialog zu starten, habe ich das folgendermaßen in AndroidManifest.xml Definiert:

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

Verwenden Sie diese Eigenschaft in Ihrem activity -Tag, um zu verhindern, dass Ihr Dialogfeld in der Liste der zuletzt verwendeten Apps angezeigt wird

Android:excludeFromRecents="true"

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

Nach setContentView() in Ihrem Activity verwenden Sie:

this.setFinishOnTouchOutside(false);

Wenn ich jetzt startActivity() aufrufe, wird es als Dialog angezeigt, wobei die vorherige Aktivität angezeigt wird, wenn der Benutzer die Zurück-Taste drückt.

Beachten Sie, dass Sie bei Verwendung von ActionBarActivity (oder AppCompat-Design) stattdessen @style/Theme.AppCompat.Dialog Verwenden müssen.

519
d-man

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

42
Maverick

Sie können diesen Stil in values ​​/ styles.xml definieren, um einen früheren Splash auszufü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">
26
herbertD

1 - Sie können dieselbe Aktivität dynamisch wie im Dialogfeld und im Vollbildmodus verwenden:

Rufen Sie setTheme(Android.R.style.Theme_Dialog) auf, bevor Sie setContentView(...) und super.oncreate() in Ihrer Aktivität aufrufen.

2 - Wenn Sie nicht vorhaben, den Aktivitätsstil zu ändern, den Sie verwenden können

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

(wie von @faisal khan erwähnt)

22
M. Usman Khan

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>
17
neferpitou

Wenn Ihre Aktivität als Dialog gerendert wird, fügen Sie einfach eine Schaltfläche zur XML-Datei 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 Klicklistener in den Java) - Code Ihrer Aktivität ein. Rufen Sie im Listener einfach finish() auf.

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

Das sollte Ihren Dialog schließen und Sie zur aufrufenden Aktivität zurückführen.

16
aaronsnoswell

Wenn Sie den Aktivitätsheader entfernen und eine benutzerdefinierte Ansicht für das Dialogfeld bereitstellen möchten, fügen Sie Folgendes zum Aktivitätsblock Ihres Manifests hinzu

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

und gestalte dein activity_layout mit deiner gewünschten ansicht

6
Ismail Iqbal

Legen Sie das Thema in Ihrer Manifestdatei Android fest.

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

Stellen Sie den Dialogstatus auf Berührung ein, um den Vorgang zu beenden.

this.setFinishOnTouchOutside(false);