2011-06-29 5 views
10

tengo un diálogo personalizado con el siguiente estilo:Android: hacer que todo alrededor de diálogo más oscuro que por defecto

<style name="webtogo_app_style" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowBackground">@android:color/transparent</item> 
</style> 

nos muestra un diálogo sin fronteras, y cualquier cosa se pone detrás (ligeramente) más oscuro. Mi diseñador quiere que todo lo que está detrás se vuelva más oscuro que el predeterminado de Android, pero no completamente negro.

¿Hay alguna configuración para esto?

La única solución que puedo pensar es utilizar una actividad de pantalla completa en lugar de un cuadro de diálogo y llenar toda la pantalla con un color semitransparente (por ejemplo, # 99000000) y luego dibujar mi diálogo sobre ella. hay una manera mas facil?

Gracias!

+0

Su camino parece bastante fácil. Creo que anular el diálogo y crear uno personalizado requeriría más esfuerzo – Blundell

Respuesta

27

Todo lo que necesita hacer es jugar con el campo dimAmount en el WindowManager.LayoutParams:

WindowManager.LayoutParams lp = myDialog.getWindow().getAttributes(); 
lp.dimAmount = 0.7f 
+0

gracias)) funciona bien – iseeall

+0

¡increíble! funciona como un encanto ... ¡muchas gracias! – Junaid

20

Si está creando un diálogo personalizado con translúcido tema, hay que añadir debajo de la línea también. y puede controlar la cantidad atenuada usando el código de respuesta anterior.

myDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 

Para mí se parece a continuación:

WindowManager.LayoutParams lp = myDialog.getWindow().getAttributes(); 
lp.dimAmount = 0.7f 
myDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
+0

Me gustaría agregar que se debe llamar primero a myDialog.show(). –

+3

Para mí solo funcionó después de agregar: 'window.setAttributes (lp);' (Ese método desencadena un evento) – Risadinha

0

trate de hacer este

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

donde de diálogo es el nombre del cuadro de diálogo creado.

1
WindowManager.LayoutParams lp=getWindow().getAttributes(); 
//set transparency of background 
lp.dimAmount=0.6f; // dimAmount between 0.0f and 1.0f, 1.0f is completely dark 
//lp.width = 200; 
//lp.height = 300; 
myDialog.getWindow().setAttributes(lp); 
myDialog.getWindow().addFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); 
Cuestiones relacionadas