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 .