Cuando mostramos un AlertDialog en Android, se muestra en el centro de la pantalla. ¿Hay alguna forma de cambiar la posición?
Cuando mostramos un AlertDialog en Android, se muestra en el centro de la pantalla. ¿Hay alguna forma de cambiar la posición?
Respuestas:
Después de buscar en varias publicaciones he encontrado la solución.
El código se publica 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 son píxeles de izquierda a derecha. Para la posición y, el valor es de abajo hacia arriba.
wmlp.x = 100; //x position wmlp.y = 100;
, solo establece la gravedad wmlp.gravity = Gravity.TOP | Gravity.LEFT;
es suficiente
Si, por ejemplo, desea mover el cuadro de diálogo de progreso un poco más hacia abajo y no establecer la posición exacta del píxel, esto es suficiente:
progressDialog.getWindow().getAttributes().verticalMargin = 0.2F;
Estas respuestas moverán la posición del AlertDialog, sin embargo, la posición del diálogo mostrado también incluirá el relleno alrededor del diálogo.
Si desea deshacerse de este relleno (por ejemplo, para colocar su cuadro de diálogo al ras contra la parte inferior de la pantalla), también deberá anular el estilo AlertDialog predeterminado en su styles.xml para establecer el windowBackground en nulo, 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 configurar Window.LayoutParameters como se describe en la respuesta aceptada.
Un agradecimiento especial a @David Caunt cuya respuesta en: eliminar borde, relleno de Dialog completó esta imagen.