Antworten:
Um die Aktivität als Dialog zu starten, habe ich sie folgendermaßen definiert AndroidManifest.xml
:
<activity android:theme="@android:style/Theme.Dialog" />
Verwenden Sie diese Eigenschaft in Ihrem activity
Tag, um zu vermeiden, 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 Dialogfelds klickt:
Nach setContentView()
Ihrer Activity
Verwendung:
this.setFinishOnTouchOutside(false);
Wenn ich startActivity()
es jetzt aufrufe, wird es als Dialog angezeigt. Die vorherige Aktivität wird angezeigt, wenn der Benutzer die Zurück-Taste drückt.
Beachten Sie, dass Sie stattdessen ActionBarActivity
(oder das AppCompat-Design) verwenden müssen @style/Theme.AppCompat.Dialog
.
@style/Theme.AppCompat.Dialog
this.setFinishOnTouchOutside(false);
um setContentView()
zu verhindern, dass die Aktivität zerstört wird, wenn Sie außerhalb des von Ihnen erstellten Dialogfelds klicken.
Verwenden Sie diesen Code, damit die Dialogaktivität nicht geschlossen wird, wenn der Benutzer außerhalb des Dialogfelds berührt:
this.setFinishOnTouchOutside(false);
erfordert API Level 11
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">
@drawable/trans
: Sie sollten in der Lage sein @android:color/transparent
, einen ColorDrawable
Hintergrund zu verwenden.
1 - Sie können dieselbe Aktivität wie Dialog und Vollbild dynamisch verwenden:
Rufen Sie setTheme(android.R.style.Theme_Dialog)
vor dem Anruf setContentView(...)
und super.oncreate()
in Ihrer Aktivität an.
2 - Wenn Sie nicht vorhaben, den Stil des Aktivitätsthemas zu ändern, können Sie ihn verwenden
<activity android:theme="@android:style/Theme.Dialog" />
(wie von @faisal khan erwähnt)
<activity android:theme="@android:style/Theme.Dialog" />
) auf ein Dialogthema und setzen Sie das Aktivitätsthema programmgesteuert auf einen Dialog oder eine Aktivität in onCreate stackoverflow.com/a/35915764/2898715
Wenn Sie eine 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>
<item name="windowNoTitle">true</item>
, damit es für mich funktioniert. Ich habe auch <item name="android:windowActionBar">false</item>
für ein gutes Maß hinzugefügt .
<item name="android:windowNoTitle">true</item>
hat es nicht funktioniert (Android 5.0.1), und ich musste zu<item name="windowNoTitle">true</item>
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 Klick-Listener in den Java-Code Ihrer Aktivität ein. Rufen Sie im Listener einfach anfinish()
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ückkehren.
Wenn Sie den Aktivitätsheader entfernen und eine benutzerdefinierte Ansicht für das Dialogfeld bereitstellen möchten, fügen Sie dem Aktivitätsblock Ihres Manifests Folgendes hinzu
android:theme="@style/Base.Theme.AppCompat.Dialog"
und gestalten Sie Ihr activity_layout mit der gewünschten Ansicht
Legen Sie das Thema in Ihrer Android-Manifest-Datei fest.
<activity android:name=".LoginActivity"
android:theme="@android:style/Theme.Dialog"/>
Stellen Sie den Dialogstatus bei Berührung ein, um den Vorgang abzuschließen.
this.setFinishOnTouchOutside(false);
Aktivität als Dialogfeld erstellen. Hier ist ein vollständiges Beispiel
AndroidManife.xml
<activity android:name=".appview.settings.view.DialogActivity" android:excludeFromRecents="true" android:theme="@style/Theme.AppCompat.Dialog"/>
DialogActivity.kt
class DialogActivity : AppCompatActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_dialog)
this.setFinishOnTouchOutside(true)
btnOk.setOnClickListener {
finish()
}
}
}
activity_dialog.xml
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="#0072ff"
android:gravity="center"
android:orientation="vertical">
<LinearLayout
android:layout_width="@dimen/_300sdp"
android:layout_height="wrap_content"
android:gravity="center"
android:orientation="vertical">
<TextView
android:id="@+id/txtTitle"
style="@style/normal16Style"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="20dp"
android:paddingBottom="20dp"
android:text="Download"
android:textColorHint="#FFF" />
<View
android:id="@+id/viewDivider"
android:layout_width="match_parent"
android:layout_height="2dp"
android:background="#fff"
android:backgroundTint="@color/white_90"
app:layout_constraintBottom_toBottomOf="@id/txtTitle" />
<TextView
style="@style/normal14Style"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center"
android:paddingTop="20dp"
android:paddingBottom="20dp"
android:text="Your file is download"
android:textColorHint="#FFF" />
<Button
android:id="@+id/btnOk"
style="@style/normal12Style"
android:layout_width="100dp"
android:layout_height="40dp"
android:layout_marginBottom="20dp"
android:background="@drawable/circle_corner_layout"
android:text="Ok"
android:textAllCaps="false" />
</LinearLayout>
</LinearLayout>
Manchmal können Sie die unten angegebene Ausnahme erhalten
Auslöser: java.lang.IllegalStateException: Für diese Aktivität müssen Sie ein Theme.AppCompat-Design (oder einen Nachkommen) verwenden.
Zum Auflösen können Sie also eine einfache Lösung verwenden
Fügen Sie das Thema Ihrer Aktivität im Manifest als Dialogfeld für appCompact hinzu.
android:theme="@style/Theme.AppCompat.Dialog"
Es kann für jemanden hilfreich sein.