Ein Problem, das ich bei allen vorhandenen Antworten festgestellt habe, ist, dass die Ränder nicht erhalten bleiben. Dies liegt daran, dass alle das android:windowBackground
Attribut, das für die Ränder verantwortlich ist, mit einer Volltonfarbe überschreiben . Ich habe jedoch ein wenig im Android SDK gegraben und festgestellt, dass der Standardfensterhintergrund zeichnbar ist, und ihn ein wenig geändert, um transparente Dialoge zu ermöglichen.
Kopieren Sie zunächst /platforms/android-22/data/res/drawable/dialog_background_material.xml in Ihr Projekt. Oder kopieren Sie einfach diese Zeilen in eine neue Datei:
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:inset="16dp">
<shape android:shape="rectangle">
<corners android:radius="2dp" />
<solid android:color="?attr/colorBackground" />
</shape>
</inset>
Beachten Sie, dass auf eingestellt android:color
ist ?attr/colorBackground
. Dies ist das Standard-Vollgrau / Weiß, das Sie sehen. Die Farbe definiert in zu ermöglichen , android:background
in Ihrem benutzerdefinierten Stil transparent und zeigen die Transparenz zu sein, alles , was wir tun müssen , ist der Wandel ?attr/colorBackground
zu @android:color/transparent
. Jetzt wird es so aussehen:
<inset xmlns:android="http://schemas.android.com/apk/res/android"
android:inset="16dp">
<shape android:shape="rectangle">
<corners android:radius="2dp" />
<solid android:color="@android:color/transparent" />
</shape>
</inset>
Gehen Sie danach zu Ihrem Thema und fügen Sie Folgendes hinzu:
<style name="MyTransparentDialog" parent="@android:style/Theme.Material.Dialog">
<item name="android:windowBackground">@drawable/newly_created_background_name</item>
<item name="android:background">@color/some_transparent_color</item>
</style>
newly_created_background_name
Stellen Sie sicher, dass Sie den tatsächlichen Namen der soeben erstellten Zeichnungsdatei durch some_transparent_color
den gewünschten transparenten Hintergrund ersetzen .
Danach müssen wir nur noch das Thema festlegen. Verwenden Sie diese Option, wenn Sie Folgendes erstellen AlertDialog.Builder
:
AlertDialog.Builder builder = new AlertDialog.Builder(this, R.style.MyTransparentDialog);
Dann erstellen, erstellen und zeigen Sie den Dialog wie gewohnt!