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:windowBackgroundAttribut, 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:colorist ?attr/colorBackground. Dies ist das Standard-Vollgrau / Weiß, das Sie sehen. Die Farbe definiert in zu ermöglichen , android:backgroundin Ihrem benutzerdefinierten Stil transparent und zeigen die Transparenz zu sein, alles , was wir tun müssen , ist der Wandel ?attr/colorBackgroundzu @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_nameStellen Sie sicher, dass Sie den tatsächlichen Namen der soeben erstellten Zeichnungsdatei durch some_transparent_colorden 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!