studio full from codepath activity android background android-dialogfragment

from - fullscreen dialogfragment android



DialogFragment con fondo claro(no atenuado) (4)

Cree su propio cuadro de diálogo personalizado con FragmentDailog y anule este método

@Override public Dialog onCreateDialog(Bundle savedInstanceState) { Dialog dialog = super.onCreateDialog(savedInstanceState); //set the dialog to non-modal and disable dim out fragment behind Window window = dialog.getWindow(); window.setFlags(WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL, WindowManager.LayoutParams.FLAG_NOT_TOUCH_MODAL); window.clearFlags(WindowManager.LayoutParams.FLAG_DIM_BEHIND); return dialog; }

NOTA: Esta respuesta funciona para mí en caso de DialogFragment y BottomSheetDialogFragment

Estoy intentando que el fondo de un DialogFragment sea ​​completamente claro.

Con la configuración del elemento de estilo android:windowIsFloating en verdadero (el valor predeterminado), DialogFragment muestra exactamente cómo lo quiero, pero tiene un fondo muy oscuro.

Al configurar android:windowIsFloating en falso, obtengo el fondo claro que quiero, pero DialogFragment sopla hasta aproximadamente el 95% de la pantalla, dejando solo un pequeño espacio alrededor donde se puede ver la vista que se superpone.

He intentado muchos ajustes y parece que no puedo anular este comportamiento.

¿Necesito usar un PopupWindow para lograr los efectos deseados, o hay algunos elementos de estilo que puedo anular?


Incluso una solución más simple es cambiar el estilo en onCreate de DialogFragment:

@Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setStyle(STYLE_NO_FRAME, getTheme()); }


Lo que me funciona es ajustar WinowManager.LayoutParams en onStart() de DialogFragment :

@Override public void onStart() { super.onStart(); Window window = getDialog().getWindow(); WindowManager.LayoutParams windowParams = window.getAttributes(); windowParams.dimAmount = 0.90f; windowParams.flags |= WindowManager.LayoutParams.FLAG_DIM_BEHIND; window.setAttributes(windowParams); }


Necesita obtener un identificador de su DialogFrament (en algún momento después de llamar a .show), y hacer esto en un Runnable publicado:

DialogFragment dialog; ... WindowManagerLayoutParams wlp = dialog.Dialog.Window.Attributes; wlp.Flags &= ~WindowManagerFlags.DimBehind; dialog.Dialog.Window.Attributes = wlp;

Lo obtuve de la respuesta de Aleks G a Cambio de posición del diálogo en la pantalla de Android .