Androidaktivität als Dialog
-
22-09-2019 - |
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?
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);