fundamentos - desarrollo de aplicaciones para android i



¿Cómo controlar el ancho y alto del diálogo de alerta predeterminado en Android? (4)

AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle("Title");
        builder.setItems(items, new DialogInterface.OnClickListener() {
            public void onClick(DialogInterface dialog, int item) {
                Toast.makeText(getApplicationContext(), items[item], Toast.LENGTH_SHORT).show();
            }
        });
        AlertDialog alert = builder.create();

Estoy usando el código anterior para mostrar un Diálogo de alerta. Por defecto, llena la pantalla en ancho y wrap_content en alto.
¿Cómo puedo controlar el ancho y la altura del diálogo de alerta predeterminado?
Lo intenté:

alert.getWindow().setLayout(100,100); // It didn't work.

¿Cómo obtener los parámetros de diseño en la ventana de alerta y configurar manualmente el ancho y alto?


Antes de intentar ajustar el tamaño del diseño posterior, primero compruebe qué estilo está usando su diálogo. Asegúrese de que no haya nada en el árbol de estilos

<item name="windowMinWidthMajor">...</item>
<item name="windowMinWidthMinor">...</item>

Si eso está sucediendo, es tan simple como proporcionar tu propio estilo al [constructor del constructor que toma un ThemeResId] ( http://developer.android.com/reference/android/app/AlertDialog.Builder.html#AlertDialog.Builder(android.content.Context , int)) API disponible 11+

<style name="WrapEverythingDialog" parent=[whatever you were previously using]>
    <item name="windowMinWidthMajor">0dp</item>
    <item name="windowMinWidthMinor">0dp</item>
</style>

Esto también funciona al agregar .getWindow().setLayout(width, height) después de show()

alertDialogBuilder
            .setMessage("Click yes to exit!")
            .setCancelable(false)
            .setPositiveButton("Yes",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int id) {
                    // if this button is clicked, close
                    // current activity
                    MainActivity.this.finish();
                }
              })
            .setNegativeButton("No",new DialogInterface.OnClickListener() {
                public void onClick(DialogInterface dialog,int id) {
                    // if this button is clicked, just close
                    // the dialog box and do nothing
                    dialog.cancel();
                }
            }).show().getWindow().setLayout(600,500);

Ok, puedo controlar el ancho y el alto usando la clase Builder. solía

AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(layout);
builder.setTitle("Title");
AlertDialog alertDialog = builder.create();
alertDialog.getWindow().setLayout(600, 400); //Controlling width and height.
alertDialog.show();

Si desea agregar ancho y alto dinámicos según el marco de su dispositivo, puede hacer estos cálculos y asignar el alto y el ancho.

 AlertDialog.Builder builderSingle = new 
 AlertDialog.Builder(getActivity());
 builderSingle.setTitle("Title");

 final AlertDialog alertDialog = builderSingle.create();
 alertDialog.show();

 Rect displayRectangle = new Rect();
 Window window = getActivity().getWindow();

 window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle);

 alertDialog.getWindow().setLayout((int)(displayRectangle.width() * 
 0.8f), (int)(displayRectangle.height() * 0.8f));

PD: primero muestre el diálogo y luego intente modificar los atributos de diseño de la ventana





android-widget