2015-04-02 5 views
5

Recentemente ho migrato la mia app per Materiale Progettazione e sono incappato in questo problema con le mie finestre di dialogo Alert:dialogo Alert Android con sfondo in più

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

sto applicando lo stile di finestra come questa:

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

e Theme.AlertDialog assomiglia a questo:

<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> 
</style> 

Questo sta accadendo sul mio dispositivo Kitkat e funziona perfettamente con Lollipop. Puoi aiutarmi a sbarazzarmi di quello sfondo esterno?

+0

Si dovrebbe usare la nuova [android.support.v7.app.AlertDialog] (http://stackoverflow.com/a/29810469/1233652). –

+0

Beh, questa è in realtà una schermata delle preferenze e la finestra di dialogo che stai vedendo, in realtà è una lista di preferenze e non credo di poter cambiare il tipo di dialogo. La risposta accettata funziona bene però ... – Adrian

risposta

8

Il punto è qui:

<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

Grazie mille! – Adrian

+0

uno sfondo trasparente è un problema sui dispositivi periferici in quanto non esiste uno sfondo di dialogo predefinito in modo che l'intera finestra di dialogo sia trasparente – 2cupsOfTech

+1

rende lo sfondo trasparente su tutti i dispositivi, ma è necessario rimuovere solo il bordo strano. Come farlo? – Trancer

0

utilizzare il tema di genitore

AlertDialog.THEME_DEVICE_DEFAULT_LIGHT 
0

Aggiungere di seguito gli stili. Devi personalizzare anche lo sfondo.

<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> 

Usando seguito funziona anche

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

Inoltre è possibile impostare nel codice utilizzando

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

e questo dovrebbe essere prima di setContentView

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

Grazie, l'unica cosa che dovevo fare era aggiungere ​​@ android: color/transparent al mio Theme.AlertDialog. Come sottolineato da SilentKnight nella sua risposta. – Adrian

+0

sì è giusto !!!!!!!! –

+0

la soluzione non sembra funzionare per dispositivi edge Samsung – 2cupsOfTech

0

ho avuto esattamente lo stesso sintomo, ma per me è stato in realtà che avevo usato il framework standard AlertDialog (e la sua Builder), invece di android.support.v7.app.AlertDialog, passare a utilizzare quello della libreria di supporto ha risolto il problema per me.

2

As ironman mi ha detto here, assicurati di importare la classe giusta.

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

Sbagliato: import android.app.AlertDialog;