Mostrar AlertDialog en cualquier posición de la pantalla
Cuando mostramos un AlertDialog en android se muestra en el centro de la pantalla. ¿Hay alguna manera de cambiar la posición?
- Cómo importar conjunto de iconos en el proyecto de Android Studio
- Algo como Twitter Bootstrap para Android?
- Cómo tomar una captura de pantalla de otra aplicación mediante programación sin permiso de root, como Screenshot UX Trial?
- Android DialogFragment Redimensionamiento automático
- Cómo mover el contenido principal con el lado izquierdo del diseño de cajones
- El reajuste de MediaPlayer de Android congela la interfaz de usuario
- Construir Reproducir Interfaz similar a la música
- ProgressBar mientras carga ListView (con AsyncTask)
- Cómo personalizar el estilo de botón Material de AppCompat?
- Fuga de memoria a través de IClipboardDataPasteEventImpl
- Reemplace el título de la barra de acción con una ruleta (desplegable)
- ¿Cómo puedo configurar una sombra en cada celda de un ListView?
- Android Dim Fondo de diálogo personalizado
Después de buscar en varios post he encontrado la solución.
El código aparece a continuación:
private CharSequence[] items = {"Set as Ringtone", "Set as Alarm"}; AlertDialog.Builder builder = new AlertDialog.Builder(this); builder.setItems(items, new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int item) { if(item == 0) { } else if(item == 1) { } else if(item == 2) { } } }); AlertDialog dialog = builder.create(); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); WindowManager.LayoutParams wmlp = dialog.getWindow().getAttributes(); wmlp.gravity = Gravity.TOP | Gravity.LEFT; wmlp.x = 100; //x position wmlp.y = 100; //y position dialog.show();
Aquí el valor de la posición x es píxeles de izquierda a derecha. Para el valor de posición y es de abajo hacia arriba.
Si por ejemplo desea mover el diálogo de progreso un poco más abajo y no establecer la posición de píxel exakt, entonces esto es suficiente:
progressDialog.getWindow().getAttributes().verticalMargin = 0.2F;
Para hacer el ajuste viene efecto de la información, agregué el código siguiente
dialog.getWindow().setAttributes(wmlp);
Después de cambiar el valor de wmlp en la respuesta de gypsicoder, o el ajuste de wmlp no toma en efecto por mi prueba.
Estas respuestas moverán la posición del AlertDialog, sin embargo, la posición del diálogo mostrado incluirá también el relleno alrededor del diálogo.
Si desea deshacerse de este relleno (por ejemplo, para colocar el cuadro de diálogo al ras de la parte inferior de la pantalla), también tendrá que reemplazar el estilo predeterminado de AlertDialog en su styles.xml para establecer el windowBackground a null, como así :
<resources> <!-- Example app theme - mine uses the below --> <style name="AppTheme" parent="Theme.AppCompat.Light.NoActionBar"> <item name="android:alertDialogTheme">@style/MyDialogTheme</item> </style> <style name="MyDialogTheme" parent="Theme.AppCompat.Light.Dialog.Alert"> <!-- Full width --> <item name="android:layout_width">fill_parent</item> <!-- Null window background kills surrounding padding --> <item name="android:windowBackground">@null</item> <item name="android:windowNoTitle">true</item> </style> </resources>
Además de establecer Window.LayoutParameters como se describe en la respuesta aceptada.
Especial shout-out a @David Caunt cuya respuesta en: eliminar la frontera, el relleno de diálogo completó esta imagen.
- Evitar que el diálogo de actividad de Android se cierre en el exterior
- Restaurar la ventana LogCat dentro de Android Studio