Estoy tratando de mostrar un DialogFragment de pantalla casi completa. Pero de alguna manera no puedo hacerlo.
La forma en que estoy mostrando el Fragmento es directamente de la documentación del desarrollador de Android
FragmentManager f = ((Activity)getContext()).getFragmentManager();
FragmentTransaction ft = f.beginTransaction();
Fragment prev = f.findFragmentByTag("dialog");
if (prev != null) {
ft.remove(prev);
}
ft.addToBackStack(null);
// Create and show the dialog.
DialogFragment newFragment = new DetailsDialogFragment();
newFragment.show(ft, "dialog");
Sé que ingenuamente intenté establecer RelativeLayout en el fragmento para fill_parent y algunos minWidth y minHeight.
<RelativeLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:minWidth="1000px"
android:minHeight="600px"
android:background="#ff0000">
Sabría esperar que el DialogFragment llene la mayoría de la pantalla. Pero solo parece cambiar el tamaño verticalmente, pero solo hasta un ancho fijo horizontalmente.
También traté de establecer los Atributos de la ventana en el código, como se sugiere aquí: http://groups.google.com/group/android-developers/browse_thread/thread/f0bb813f643604ec . Pero esto tampoco ayudó.
Probablemente estoy malinterpretando algo acerca de cómo Android maneja los Diálogos, ya que soy nuevo en esto. ¿Cómo puedo hacer algo como esto? ¿Hay alguna forma alternativa de alcanzar mi objetivo?
Dispositivo Android:
Asus EeePad Transformer
Android 3.0.1
Actualización: ahora logré ponerlo en pantalla completa, con el siguiente código en el fragmento
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setStyle(STYLE_NO_FRAME, android.R.style.Theme_Holo_Light);
}
Desafortunadamente, esto no es exactamente lo que quiero. Definitivamente necesito un pequeño "relleno" alrededor del diálogo para mostrar el fondo.
¿Alguna idea de cómo lograr eso?
Respuestas:
Intente cambiar a un en
LinearLayout
lugar deRelativeLayout
. Estaba apuntando a la API 3.0 Honeycomb cuando probaba.y los diseños : fragment_dialog.xml
main.xml
fuente
Para obtener DialogFragment en pantalla completa
Anulación
onStart
de su DialogFragment de esta manera:Y muchas gracias a esta publicación: The-mystery-of-androids-full-screen-dialog-fragments
fuente
ViewGroup.LayoutParams.WRAP_CONTENT
por la altura. Gracias.fuente
De acuerdo con este enlace, DialogFragment fullscreen muestra relleno en los lados, esto funcionará de maravilla .
fuente
Haga un DialogFragment de pantalla completa usando solo el estilo
Primera solución
1. Agregue a su
style.xml
:2. Agregue a su DialogFragment:
Solución alternativa
¿Dónde
AppTheme
está el tema que definiste en los estilos?fuente
En mi caso utilicé el siguiente enfoque:
Además LinearLayout para llenar todo el espacio con contenido.
Pero todavía había pequeños espacios entre los bordes izquierdo y derecho del cuadro de diálogo y los bordes de la pantalla en algunos dispositivos Lollipop + (por ejemplo, Nexus 9).
No era obvio, pero finalmente descubrí que para hacer el ancho completo en todos los dispositivos y plataformas , el fondo de la ventana debería especificarse dentro de styles.xml de la siguiente manera:
Y, por supuesto, este estilo debe usarse cuando creamos el diálogo como el siguiente:
fuente
<item name="android:windowFullscreen">true</item> <item name="android:windowIsFloating">false</item>
Fuente: TechRepublicConocí el problema antes al usar un cuadro de diálogo de pantalla completa Fragmento: siempre hay un relleno al configurar la pantalla completa. intente este código en el método onActivityCreated () de dialogFragment:
fuente
En cuanto se actualizó la API de Android, el método sugerido para mostrar un cuadro de diálogo de pantalla completa es el siguiente:
de lo contrario, si no desea que se muestre a pantalla completa, puede hacerlo de esta manera:
Espero eso ayude.
EDITAR
Tenga en cuenta que la solución que le di funciona funciona pero tiene una debilidad que a veces podría ser problemática. Agregar el DialogFragment al
android.R.id.content
contenedor no le permitirá manejar laDialogFragment#setCancelable()
función correctamente y podría conducir a comportamientos inesperados al agregar el DialogFragment en sí mismo a la pila posterior también.Así que le sugerí que simplemente cambiara el estilo de su DialogFragment en el método onCreate de la siguiente manera:
Espero eso ayude.
fuente
Intente usar setStyle () en onCreate y anule onCreateDialog make dialog sin título
o simplemente anule onCreate () y setStyle con el código.
fuente
De hecho, depende de cómo se defina el diseño. Pero para garantizar que el cuadro de diálogo obtenga el tamaño requerido, la mejor solución es proporcionar los LayoutParams una vez que se muestra el cuadro de diálogo (y no en la creación). En un DialogFragment, el cuadro de diálogo se muestra en el método onStart , por lo que un método válido para obtener el ancho completo es:
Para proporcionar también un tema o estilo, como un estilo NO_TITLE, la mejor ubicación está en el método onCreate :
fuente
Nota: Incluso uno puede encontrar la respuesta correcta aquí. Pero quiero aclarar una confusión.
Use el siguiente código para
android.app.DialogFragment
Use el siguiente código para
android.support.v4.app.DialogFragment
fuente
¡Y la versión de Kotlin!
fuente
Esta es la solución de cómo resolví este problema:
fuente
Cree el tema a continuación en su style.xml:
luego configure el estilo en DialogFragment
fuente
Chirag Nagariya tiene razón, excepto la adición '_Fullscreen'. Se puede resolver utilizando cualquier estilo base que no se derive del estilo de diálogo. 'android.R.style.Theme_Black_NoTitleBar' también se puede usar.
fuente
En caso de que alguien más se encuentre con esto, tuve una experiencia similar a esta, pero resulta que el problema fue que había olvidado devolver la vista inflada de onCreateView (en lugar de devolver el super.onCreateView predeterminado). Simplemente devolví la vista inflada correcta y eso resolvió el problema.
fuente
Esta solución aplica un tema de pantalla completa en el cuadro de diálogo, que es similar al setStyle de Chirag en onCreate. Una desventaja es que saveInstanceState no se usa.
fuente
Pruebe esto para el cuadro de diálogo de fragmentos comunes para múltiples usos. Espero que esto te ayude a apostar
fuente
Esto es lo que necesita configurar para fragmentar:
En tu caso:
¿Y por qué? Debido a que DialogFragment (cuando no se indica explícitamente), usará sus estilos internos que envolverán su diseño personalizado (sin pantalla completa, etc.).
¿Y el diseño? No se necesita una forma hacky, esto funciona bien:
Disfrutar
fuente
Llego muy tarde para responder esta pregunta, pero quiero compartir esta respuesta para que en el futuro cualquiera pueda usarla.
He usado este código en mi proyecto, funciona tanto en la versión inferior como en la versión superior.
Simplemente use este tema dentro de onCreateDialog () así:
android.R.style.Theme_Black_NoTitleBar_Fullscreen: aquí está el código fuente de este tema, puede ver que solo este tema es suficiente para que DialogFragment aparezca en pantalla completa.
Avíseme si alguien tiene algún problema. Espero que esto sea útil. Gracias :)
fuente
La siguiente forma funcionará incluso si está trabajando en un diseño relativo. Siga los siguientes pasos:
Vaya a styles.xml y luego, bajo el tema que acaba de agregar, agregue estos dos atributos:
La configuración de mi tema para el diálogo es la siguiente:
Asegúrese de que el tema tenga un elemento primario como Theme.AppCompat.Dialog Otra forma sería crear un nuevo estilo en styles.xml y cambiarlo según el código anterior.
Vaya a su clase Fragmento de diálogo y en el método onCreate () , configure el estilo de su diálogo como:
@Override public void onCreate (@Nullable Bundle savedInstanceState) {super.onCreate (savedInstanceState); setStyle (DialogFragment.STYLE_NORMAL, R.style.DialogTheme); }
fuente
Agregue estas líneas a continuación en el estilo del cuadro de diálogo de pantalla completa.
fuente
window.setLayout
no es suficiente para dispositivos más antiguos.Esto es lo que hago:
fuente
fuente
Una solución mediante el uso de la nueva
ConstraintLayout
es envolver elConstraintLayout
en unLinearLayout
con minHeight y minWidth fijos. Sin el ajuste, ConstraintLayout no está obteniendo el tamaño correcto para el Diálogo.fuente
Trabajó para mí en Kotlin,
fuente
la siguiente solución funcionó para mí otra solución me dio algo de espacio en los lados, es decir, no a pantalla completa
Debe realizar cambios en el método onStart y onCreate
fuente