Cuando nos muestran un AlertDialog en android se muestra en el centro de la pantalla. Hay alguna forma de cambiar la posición?

InformationsquelleAutor gypsicoder | 2011-03-29

4 Comentarios

  1. 243

    Después de buscar en varios post que 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í x de la posición del valor de los píxeles de izquierda a derecha. Para el valor de posición y es de inferior a superior.

    • También podría crear una alerta personalizada de diálogo. Hace poco me hizo esto y luego tuvo que obtener la muestra de anchura y altura y, a continuación, establezca la X y la y, se basa en un porcentaje de los valores, de tal manera que el diseño de la escala muy bien. developer.android.com/guide/topics/ui/dialogs.html#CustomDialog
    • Funciona, pero he tenido que añadir esto: WMLP.gravedad = Gravedad.SUPERIOR | Gravedad.A la IZQUIERDA; de lo contrario, los valores de x e y fueron utilizados como desplazamientos desde el centro de la pantalla.
    • Sólo para compartir la experiencia: el código anterior funciona sólo mientras el cuadro de diálogo puede permanecer completamente en la pantalla. Por ejemplo, si la nueva coordenada y es demasiado grande, el diálogo se mueve a la posición más baja en la pantalla que sigue muestra el diálogo completo. El truco aquí es que los valores x e y de los parámetros de diseño de diapositivas a partir de entonces ya no las coordenadas de la esquina superior izquierda de la ventana de diálogo de más y no puede ser utilizado para el cálculo de un movimiento relativo de la ventana, por ejemplo, al reaccionar a un MotionEvent.
    • funciona como un encanto ..pero no hay necesidad de establecer wmlp.x = 100; //x position wmlp.y = 100; que acaba de establecer la gravedad wmlp.gravity = Gravity.TOP | Gravity.LEFT; es suficiente
  2. 14

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

    progressDialog.getWindow().getAttributes().verticalMargin = 0.2F;
    • Quiero dar alrededor de 10 dp de margen para el diálogo alerta de cuya gravedad es el centro. ¿Puedo utilizar el código anterior? Si no, entonces ¿hay alguna otra manera de hacerlo?
  3. 5

    Para realizar el ajuste venir info efecto, he añadido el siguiente código

    dialog.getWindow().setAttributes(wmlp);

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

  4. 0

    Estas respuestas se moverá a la posición de la AlertDialog, sin embargo, la posición de la muestra de diálogo también se incluyen el relleno alrededor del cuadro de diálogo.

    Si desea deshacerse de este relleno (por ejemplo, para colocar el cuadro de diálogo ras contra la parte inferior de la pantalla), usted también tendrá que reemplazar el valor predeterminado AlertDialog estilo en su styles.xml para establecer el windowBackground a null, 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> 

    Así como la configuración de la Ventana.LayoutParameters como se describe en la respuesta.

    Especial grito a @David Caunt, cuya respuesta en: quitar el borde, relleno de Diálogo completado este cuadro.

Dejar respuesta

Please enter your comment!
Please enter your name here