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 cuadro de diálogo de alerta. Por defecto, llena la pantalla en ancho y wrap_content en alto.
¿Cómo puedo controlar el ancho y el alto 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 el alto?
android
android-widget
se sentó
fuente
fuente
height
ywidth
qué soporte para todos los dispositivos.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();
fuente
Antes de intentar ajustar el tamaño del diseño posterior, primero verifique qué estilo está usando su diálogo. Asegúrese de que no se establezca nada en el árbol de estilo.
<item name="windowMinWidthMajor">...</item> <item name="windowMinWidthMinor">...</item>
Si eso está sucediendo, es tan simple como proporcionar su 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>
fuente
Para aquellos que encontrarán este hilo como yo, aquí está la mejor solución de la OMI (tenga en cuenta el 70% que establece el ancho mínimo del diálogo en porcentaje del ancho de la pantalla):
<style name="my_dialog" parent="Theme.AppCompat.Dialog.Alert"> <item name="windowMinWidthMajor">70%</item> <item name="windowMinWidthMinor">70%</item> </style>
Y luego aplique este estilo al diálogo:
AlertDialog.Builder builder = new AlertDialog.Builder(context, R.style.my_dialog);
fuente
Esto también funciona agregando
.getWindow().setLayout(width, height)
despuésshow()
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);
fuente
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 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: muestre el cuadro de diálogo primero y luego intente modificar los atributos de diseño de la ventana
fuente
No sé si puede cambiar el alto / ancho predeterminado de AlertDialog, pero si quisiera hacer esto, creo que puede hacerlo creando su propio diálogo personalizado. Solo tiene que
android:theme="@android:style/Theme.Dialog"
ingresar el manifest.xml de Android para su actividad y puede escribir el diseño completo según sus requisitos. puede establecer la altura y el ancho de su cuadro de diálogo personalizado desde el XML de recursos de Android.fuente
Aprecio respondido por Sid porque es dinámica pero quiero agregar algo.
¿Qué sucede si solo desea cambiar el ancho, la altura será como está?
He hecho lo siguiente:
// All process of AlertDialog AlertDialog alert = builder.create(); alert.show(); // Creating Dynamic Rect displayRectangle = new Rect(); Window window = getActivity().getWindow(); window.getDecorView().getWindowVisibleDisplayFrame(displayRectangle); alert.getWindow().setLayout((int) (displayRectangle.width() * 0.8f), alert.getWindow().getAttributes().height);
Aquí solía
alert.getWindow().getAttributes().height
mantener la altura tal como estáAlertDialog
yWidth
se cambiará según la resolución de la pantalla.Espero que ayude. Gracias.
fuente
longButton.setOnClickListener { show( "1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n" + "1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n" + "1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n" + "1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n" + "1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n" + "1\n2\n3\n4\n5\n6\n7\n8\n9\n0\n" + "1234567890-12345678901234567890123456789012345678901234567890" ) } shortButton.setOnClickListener { show( "1234567890\n" + "1234567890-12345678901234567890123456789012345678901234567890" ) }
private fun show(msg: String) { val builder = AlertDialog.Builder(this).apply { setPositiveButton(android.R.string.ok, null) setNegativeButton(android.R.string.cancel, null) } val dialog = builder.create().apply { setMessage(msg) } dialog.show() dialog.window?.decorView?.addOnLayoutChangeListener { v, _, _, _, _, _, _, _, _ -> val displayRectangle = Rect() val window = dialog.window v.getWindowVisibleDisplayFrame(displayRectangle) val maxHeight = displayRectangle.height() * 0.6f // 60% if (v.height > maxHeight) { window?.setLayout(window.attributes.width, maxHeight.toInt()) } } }
fuente
Creo que la respuesta de tir38 es la solución más limpia. Tenga en cuenta que si está utilizando android.app.AlerDialog y temas holo, su estilo debería verse así
<style name="WrapEverythingDialog" parent=[holo theme ex. android:Theme.Holo.Dialog]> <item name="windowMinWidthMajor">0dp</item> <item name="windowMinWidthMinor">0dp</item> </style>
Y si usa support.v7.app.AlertDialog o androidx.appcompat.app.AlertDialog con el tema AppCompat, su estilo debería verse así
<style name="WrapEverythingDialog" parent=[Appcompat theme ex. Theme.AppCompat.Light.Dialog.Alert]> <item name="android:windowMinWidthMajor">0dp</item> <item name="android:windowMinWidthMinor">0dp</item> </style>
fuente