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 forma de cambiar la posición?

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 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 cuadro de diálogo de progreso un poco más hacia abajo y no establecer la posición exakt de píxel, entonces esto es suficiente:

 progressDialog.getWindow().getAttributes().verticalMargin = 0.2F; 

Para hacer que el ajuste venga efecto de información, agregué el siguiente código
dialog.getWindow().setAttributes(wmlp);

después de cambiar el valor de wmlp en la respuesta de gypsicoder, o la configuración de wmlp no tiene efecto por mi prueba.

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 de la parte inferior de la pantalla), también deberá anular el estilo AlertDialog predeterminado en su styles.xml para establecer el valor de windowBackground como nulo, como tal :

      

Además de configurar Window.LayoutParameters como se describe en la respuesta aceptada.

Llamamiento especial a @David Caunt cuya respuesta en: eliminar borde, relleno de Diálogo completó esta imagen.