2011-03-29 16 views

Respuesta

219

Después de buscar en varias publicaciones, he encontrado la solución.

El código se publica a continuación: Valor de

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í x de la posición es píxeles de izquierda a derecha. Para el valor de posición y es de abajo hacia arriba.

+1

También podría crear un cuadro de diálogo de alerta personalizado. Hace poco hice esto y luego tuve que obtener el ancho y alto de las pantallas y luego establecí X e Y en función de un porcentaje de esos valores, de esa manera el diseño se escalo bien. http://developer.android.com/guide/topics/ui/dialogs.html#CustomDialog – Roloc

+15

Funciona, pero tuve que agregar esto: WMLP.gravity = Gravity.TOP | Gravity.LEFT; de lo contrario, los valores xey se usaron como desplazamientos desde el centro de la pantalla. – BoD

+1

Solo para compartir la experiencia: El código anterior funciona solo mientras el diálogo permanezca completamente en la pantalla. Por ejemplo, si la nueva coordenada y es demasiado grande, el cuadro de diálogo se mueve a la posición más baja en la pantalla que todavía muestra el diálogo completo. La parte difícil aquí es que los valores xey de los parámetros de diseño muestran a partir de ese momento las coordenadas de la esquina superior izquierda de la ventana de diálogo y no pueden usarse para calcular un movimiento relativo de la ventana, por ejemplo cuando reaccionando a un evento MotionEvent. – Nantoka

12

Si, por ejemplo, desea mover el progressdialog un poco más abajo, y no establecer la posición exakt píxel, entonces esto es suficiente:

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

para realizar el ajuste vienen efecto de información, añadí la siguiente código
dialog.getWindow().setAttributes(wmlp);

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

0

Estas respuestas moverán la posición del AlertDialog, sin embargo, la posición del cuadro de diálogo mostrado también incluirá el relleno alrededor del cuadro de diálogo.

Si desea deshacerse de este relleno (por ejemplo, para colocar el cuadro de diálogo alineado con la parte inferior de la pantalla), también deberá sobrescribir el estilo AlertDialog predeterminado en su styles.xml para configurar windowBackground en nula, 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 los Window.LayoutParameters como se describe en la respuesta aceptada.

Llamamiento especial a @David Caunt cuya respuesta al: remove border, padding from Dialog completó esta imagen.

Cuestiones relacionadas