¿Cómo establecer la posición del diálogo?

He hecho un diálogo personalizado.

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

captura de pantalla

 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 forma de colocarlo donde lo necesito. params.y=225; params.x=225; De alguna manera no lo afectan.

¿Algunas ideas?


Edit: Si tengo el xml como ese (style / Theme.Dialog), entonces los parámetros y la ubicación funcionan bien, pero aparece una sombra modal. ¿Hay alguna manera de eliminarlo?

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

Intente usar Theme.Panel como el parent del estilo en parent lugar.

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, podría intentar agregar esto como la segunda línea:

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

Sin embargo, tenga en cuenta que el método copyFrom es completamente indocumentado, así que no tengo ni idea de si hace lo que suena como lo hace.

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

Otra edición

Ok, entonces, éste debe ser de más uso: Llamar a Android diálogo sin que se desvanezca el fondo

En el código anterior la línea …

 dialog.show(); 

Debe aparecer después

 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á mostrando el diálogo primero, a continuación, establecer las coordenadas x, y después de que el diálogo ya ha sido dibujado a la pantalla.

Sólo elimine params.gravity = Gravity.TOP | Gravity.LEFT; Y funcionará. He intentado.

  • ¿Por qué resource.getStringArray (int) lanzará una excepción?
  • Reaccionar nativa Android SyntaxError: Se ha intentado redefinir la propiedad 'clave'
  • Herramientas para creaciones rápidas de diseño / interfaz?
  • Portando el servidor java a Android
  • ¿Cómo se comunica una aplicación de chat con su servidor?
  • ¿El iterador de lista provoca asignaciones de montón?
  • Android Databinding radiogroupos
  • Diferentes claves públicas RSA generadas en Android
  • Obtener índice de objetos en una lista de Java
  • ¿Cómo puedo convertir una parte del archivo de código fuente de Java a Kotlin?
  • Deshabilitar la animación de transición entre actividades
  • FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.