De acuerdo con la desarrolladora de la plataforma Android Dianne Hackborn en esta publicación del grupo de discusión, los Diálogos establecen el ancho y la altura del diseño de nivel superior de su Ventana WRAP_CONTENT
. Para agrandar el cuadro de diálogo, puede establecer esos parámetros en MATCH_PARENT
.
Código de demostración:
AlertDialog.Builder adb = new AlertDialog.Builder(this);
Dialog d = adb.setView(new View(this)).create();
// (That new View is just there to have something inside the dialog that can grow big enough to cover the whole screen.)
WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
lp.copyFrom(d.getWindow().getAttributes());
lp.width = WindowManager.LayoutParams.MATCH_PARENT;
lp.height = WindowManager.LayoutParams.MATCH_PARENT;
d.show();
d.getWindow().setAttributes(lp);
Tenga en cuenta que los atributos se establecen después de que se muestra el cuadro de diálogo. El sistema es quisquilloso cuando se configuran. (Supongo que el motor de diseño debe establecerlos la primera vez que se muestra el cuadro de diálogo, o algo así).
Sería mejor hacer esto extendiendo Theme.Dialog, entonces no tendría que jugar un juego de adivinanzas sobre cuándo llamar a setAttributes. (Aunque es un poco más trabajo hacer que el diálogo adopte automáticamente un tema claro u oscuro apropiado, o el tema Honeycomb Holo. Eso se puede hacer de acuerdo con http://developer.android.com/guide/topics/ui/themes. html # SelectATheme )
Intente ajustar su diseño de diálogo personalizado en
RelativeLayout
lugar deLinearLayout
. Eso funcionó para mí.fuente
Especificar FILL_PARENT en la ventana de diálogo, como sugirieron otros, no funcionó para mí (en Android 4.0.4), ya que simplemente extendió el fondo de diálogo negro para llenar toda la pantalla.
Lo que funciona bien es usar el valor de visualización mínimo, pero especificarlo dentro del código, de modo que el diálogo tome el 90% de la pantalla.
Entonces:
En general, solo ajustar el ancho debería ser suficiente en la mayoría de los casos.
fuente
Establecer
android:minWidth
yandroid:minHeight
en su vista personalizada xml. Estos pueden forzar la alerta no solo a ajustar el tamaño del contenido. Usar una vista como esta debería hacerlo:fuente
Aún más simple, solo haz esto:
fuente
onCreate
después de la rotación del dispositivo. En este caso, no podemos confiar en el ancho / alto de nada en el diseño, porque aún no se ha creado; pero el ancho / alto físico del dispositivo aún están disponibles.ViewGroup.LayoutParams.WRAP_CONTENT
como uno de los parámetrosfuente
FILL_PARENT
por el ancho calculado como el 90% del ancho de la pantalla actual. Pero me gusta la respuesta porque es más fácil que las demás.Todas las otras respuestas aquí tienen sentido, pero no cumplieron con lo que Fabian necesita. Aquí hay una solución mía. Puede que no sea la solución perfecta, pero funciona para mí. Muestra un cuadro de diálogo que está en pantalla completa, pero puede especificar un relleno en la parte superior, inferior, izquierda o derecha.
Como puede ver, tengo android: paddingTop = 20dp es básicamente lo que necesita. El android: windowBackground = @ color / Black0Percent es solo un código de color declarado en mi color.xml
Ese código de color solo sirve como un maniquí para reemplazar el fondo de la ventana predeterminada del cuadro de diálogo con un color de transparencia del 0%.
Finalmente, aquí está nuestro diálogo que establece una vista personalizada que utiliza nuestro dialog.xml:
Conclusión: intenté anular el tema del diálogo en styles.xml llamado CustomDialog. Anula el diseño de la ventana de diálogo y me da la oportunidad de establecer un relleno y cambiar la opacidad del fondo. Puede que no sea la solución perfecta, pero espero que te ayude ... :)
fuente
DialogFragment
) aparece cuando lo haces:Dialog customDialog = new Dialog(context, STYLE);
gracias, REALMENTE, gracias.Puede usar el porcentaje para (SOLO) ancho de diálogo de ventanas.
Mira este ejemplo de Holo Theme:
Todo lo que necesita hacer es extender este tema y cambiar los valores de "Mayor" y "Menor" al 90% en lugar del 65%.
Saludos.
fuente
Lo siguiente funcionó bien para mí:
(nota: windowMinWidthMajor / Minor, como se sugirió en las respuestas anteriores, no funcionó. Mis cuadros de diálogo cambiaron de tamaño dependiendo del contenido)
y entonces:
fuente
Solución con cálculo real del 90%:
donde
getScreenWidth(Activity activity)
se define lo siguiente (mejor puesto en una clase Utils):fuente
Obtenga el ancho del dispositivo:
luego use eso para hacer el diálogo del 90% del dispositivo,
fuente
Bueno, debe configurar la altura y el ancho de su cuadro de diálogo antes de mostrar esto (dialog.show ())
entonces, haz algo como esto:
fuente
Con mucho, la forma más simple que se me ocurre:
Si su diálogo está hecho de un diseño lineal lineal, simplemente agregue una vista ficticia de "relleno de altura", que ocupará toda la altura de la pantalla.
Por ejemplo -
Observe los
android:weightSum="1"
atributos en los atributos LinearLayout yandroid:layout_weight="1"
en los atributos de la vista ficticia.fuente
Bueno, debe configurar la altura y el ancho de su cuadro de diálogo antes de mostrar esto (dialog.show ())
entonces, haz algo como esto:
Obteniendo este código, lo hice algunos cambios:
sin embargo, el tamaño del diálogo puede cambiar cuando el dispositivo cambia su posición. Tal vez necesite manejar por su cuenta cuando las métricas cambien. PD: peekDecorView, implica que el diseño de la actividad se inicializa correctamente; de lo contrario, puede usar
para obtener el tamaño de la pantalla
fuente
Después de inicializar su objeto de diálogo y establecer la vista de contenido. Haz esto y disfruta.
(en el caso, estoy configurando 90% de ancho y 70% de alto porque el ancho de 90% estará sobre la barra de herramientas)
fuente
Mi respuesta se basa en koma, pero no requiere anular onStart, sino solo onCreateView, que casi siempre se anula de manera predeterminada cuando se crean nuevos fragmentos.
Lo he probado en Android 5.0.1.
fuente
Aquí está mi variante para el ancho del cuadro de diálogo personalizado:
Por lo tanto, dependiendo de la orientación del dispositivo (
ThemeHelper.isPortrait(mContext)
), el ancho del diálogo será del 95% (para el modo vertical) o del 65% (para el horizontal). Es un poco más de lo que preguntó el autor, pero podría ser útil para alguien.Debe crear una clase que se extienda desde Dialog y poner este código en su
onCreate(Bundle savedInstanceState)
método.Para la altura del diálogo, el código debe ser similar a este.
fuente
ThemeHelper
? No tengo esta clase disponible en mi proyecto.ThemeHelper
es solo una clase auxiliar para mis necesidades. Su métodoisPortrait(Context)
devuelve si la orientación de la pantalla del dispositivo es vertical u horizontal.fuente
Por encima de muchas de las respuestas son buenas, pero ninguna funcionó completamente para mí. Así que combiné la respuesta de @nmr y obtuve esta.
fuente
fuente
Si está utilizando el diseño de restricción , puede configurar cualquier vista dentro de él, para llenar un porcentaje de la pantalla con:
layout_constraintWidth_percent = "0.8"
Entonces, por ejemplo, si tiene un ScrollView dentro del cuadro de diálogo y desea establecerlo en un porcentaje de la altura de la pantalla. Sería así:
Espero que ayude a alguien !!
fuente
Solo dale al AlertDialog este tema
fuente
Debe usar un estilo @ style.xml como CustomDialog para mostrar el cuadro de diálogo personalizable.
y usa este estilo en Activity.java como este
y su custom_dialog.xml debería estar dentro de su directorio de diseño
fuente
Aquí hay una respuesta corta que funcionó para mí (Probado en API 8 y API 19).
fuente
fuente
fuente