2015-04-02 5 views
5

ich meine App Material Design vor kurzem migriert und ich stolperte über dieses Problem mit meiner Warnung Dialogen:Android Alert-Dialog mit zusätzlichem Hintergrund

dialog appears to be having two backgrounds and I don't know how to get rid of the outer background

ich den Dialog Stil wie diese Anwendung:

<item name="android:alertDialogTheme">@style/Theme.AlertDialog</item>

und Theme.AlertDialog sieht wie folgt aus:

Dies geschieht auf meinem Kitkat Gerät und es funktioniert gut auf Lollipop. Kannst du mir helfen, diesen äußeren Hintergrund loszuwerden?

+0

Sie sollten die neuen verwenden [android.support.v7.app.AlertDialog] (http://stackoverflow.com/a/29810469/1233652). –

+0

Nun, das ist eigentlich ein Einstellungsbildschirm und der Dialog, den Sie sehen, ist eigentlich eine Listenpräferenz und ich glaube nicht, dass ich den Typ des Dialogs ändern kann. Die angenommene Antwort funktioniert aber gut ... – Adrian

Antwort

8

Der Punkt ist hier:

<style name="Theme.AlertDialog" parent="Base.V14.Theme.AppCompat.Dialog"> 
    ... 
    <item name="colorPrimary">@color/theme_primary</item> 
    <item name="colorPrimaryDark">@color/theme_primary_dark</item> 
    <item name="colorAccent">@color/theme_accent_dark</item> 
    ... 
    <item name="android:windowBackground">@android:color/transparent</item> 
    ... 
</style> 
+0

Vielen Dank! – Adrian

+0

ein transparenter Hintergrund ist ein Problem auf Edge-Geräten, da es keinen Standard-Dialoghintergrund gibt, so dass der gesamte Dialog transparent ist – 2cupsOfTech

+1

es macht transparenten Hintergrund auf allen Geräten, aber nur seltsame Grenze entfernen. Wie geht das? – Trancer

0

Verwenden Sie das Thema in Mutter

AlertDialog.THEME_DEVICE_DEFAULT_LIGHT 
0

unten Arten hinzufügen. Sie müssen den Hintergrund auch anpassen.

<item name="android:windowFrame">@null</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowIsFloating">true</item> 
    <item name="android:windowContentOverlay">@null</item> 
    <item name="android:windowTitleStyle">@null</item> 
    <item name="android:windowAnimationStyle">@android:style/Animation.Dialog</item> 
    <item name="android:backgroundDimEnabled">false</item> 
    <item name="android:background">@android:color/transparent</item> 

Sie mit den unten auch

<item name="android:windowBackground">@android:color/transparent</item> 
<item name="android:background">@android:color/transparent</item> 

Funktioniert auch Sie in Ihrem Code festlegen können durch

dialog.getWindow().setBackgroundDrawable(new ColorDrawable(android.graphics.Color.TRANSPARENT)); 

verwenden und dies sollte vor setContentView

dialog.setContentView(R.layout.dialog); 
+0

Danke, das einzige, was ich tun musste, war, ​​@ android: color/transparent zu meinem Theme.AlertDialog hinzuzufügen. Darauf hat SilentKnight in seiner Antwort hingewiesen. – Adrian

+0

ja das stimmt !!!!!!!! –

+0

die Lösung scheint nicht für Samsung Edge-Geräte zu arbeiten – 2cupsOfTech

0

ich genau das gleiche Symptom hatte, aber für mich war es eigentlich, dass ich die Standard-Frameworks Alertdialog verwendet hatte (und dessen Builder) statt android.support.v7.app.AlertDialog, Der Wechsel zur Verwendung der Bibliothek aus der Support-Bibliothek hat das Problem für mich behoben.

2

Wie ironman sagte mir here, sicher sein, dass Sie die richtige Klasse importieren.

Rechts: import android.support.v7.app.AlertDialog;

Falsch: import android.app.AlertDialog;