2011-08-08 11 views
8

He hecho un cuadro de diálogo personalizado.¿Cómo establecer la posición del diálogo?

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="myBackgroundStyle" 
     parent="@android:style/Theme.Translucent.NoTitleBar" /> 
</resources> 

screenshot

Dialog dialog = new Dialog(this, R.style.myBackgroundStyle); 
dialog.setContentView(R.layout.dialog); 

dialog.show(); 

WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); 
params.y = 225; params.x = 225; 
params.gravity = Gravity.TOP | Gravity.LEFT;  
dialog.getWindow().setAttributes(params); 

Pero el problema es que aparece en la esquina superior izquierda y no puedo encontrar una manera de colocarlo donde lo necesito. params.y=225; params.x=225; de alguna manera no lo afecta.

¿Alguna idea?


edición: Si tengo el xml de esa manera (estilo/Theme.Dialog), aparece entonces los parámetros y funcionan bien ubicación, pero una sombra modal. ¿Hay un modo de quitarlo?

<?xml version="1.0" encoding="utf-8"?> 
<resources> 
    <style name="myBackgroundStyle" parent="@android:style/Theme.Dialog"> 
    <item name="android:windowBackground">@android:color/transparent</item> 
    <item name="android:windowNoTitle">true</item> 
    <item name="android:windowFullscreen">false</item> 
    </style> 
</resources> 

Respuesta

2

no es 100% seguro, pero es algo que ver con params.gravity=Gravity.TOP | Gravity.LEFT;?

otra edición

bien entonces, éste debe ser de más utilidad: Calling android dialog without it fading the background

+0

No es realmente, más como su en "Theme.Translucent.NoTitleBar". Es decir. si es Theme.Dialog, entonces los params funcionan bien, pero obtengo esa sombra modal por todas partes. – Roger

+0

ver las ediciones anteriores. – Roger

+0

no realmente. El enlace trata de eliminar esa pequeña sombra de la barra de título, mientras que necesito eliminar el sombreado del modelo (es decir, el oscurecimiento de toda la pantalla detrás del cuadro de diálogo). – Roger

7

intente crear un nuevo conjunto de parámetros:

WindowManager.LayoutParams params = new WindowManager.LayoutParams(); 
params.y = 225; params.x = 225; 
params.gravity = Gravity.TOP | Gravity.LEFT;  
dialog.getWindow().setAttributes(params); 

Editar: si desea conservar los atributos de la ventana, puede intentar agregar esto como la segunda línea:

params.copyFrom(dialog.getWindow().getAttributes()); 

Sin embargo, tenga en cuenta que el método copyFrom está completamente indocumentado, así que no tengo idea de si hace lo que parece.

+0

no, parece que no funciona con "Theme.Translucent.NoTitleBar" – Roger

0

Solo elimine params.gravity = Gravity.TOP | Gravity.LEFT; y funcionará He intentado.

2

En el código anterior de la línea ...

dialog.show(); 

debería aparecer después de

WindowManager.LayoutParams params = dialog.getWindow().getAttributes(); 
params.y = 225; params.x = 225; 
params.gravity = Gravity.TOP | Gravity.LEFT;  
dialog.getWindow().setAttributes(params); 
... 

Por el aspecto de las cosas que están mostrando el diálogo de configuración de la primera x continuación, las coordenadas Y después de que el diálogo ya ha sido dibujado a la pantalla.

Cuestiones relacionadas