Estoy tratando de llegar al fondo de un DialogFragment a ser completamente claro.

Con ajuste el elemento de estilo android:windowIsFloating a true (el valor predeterminado),
el DialogFragment muestra exactamente cómo me quieres, pero tiene un fondo atenuado.

Mediante el establecimiento de android:windowIsFloating a false, me sale el fondo claro que quiero, pero el DialogFragment golpes de hasta el 95% de la pantalla,
dejando sólo una pequeña brecha a su alrededor donde se puede ver a través de la opinión de que las superposiciones.

He tratado de toneladas de ajustes y no se parece para anular este comportamiento.

Qué necesito para utilizar un PopupWindow para lograr los efectos deseados, o hay algo de estilo
los elementos que lo puedo reemplazar ?

Yo sólo vine a través de la LayoutParameter bandera administrador de ventanas.LayoutParams.FLAG_DIM_BEHIND. Esperemos que esto va a hacer…

OriginalEl autor samis | 2012-12-11

4 Comentarios

  1. 69

    Lo que funciona para mí es ajustar el WinowManager.LayoutParams en onStart() de la 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);
    }
    +1, a mi me funciona. Para sin dim a todos, uso windowParams.dimAmount = 0;. Además, usted debe hacer esto en onStart(), no onCreateView().
    ¿Por qué se hace sólo en onStart() ¿por qué no en onCreateView()?
    El diálogo no es todavía prestados/instanciado en onCreateView().
    No, no necesitas tocar windowParams.dimAmount. Acaba de quitar WindowManager.LayoutParams.FLAG_DIM_BEHIND de windowParams.flags

    OriginalEl autor Christopher Perry

  2. 3

    Usted necesita para obtener un identificador para su DialogFrament (en algún momento después .espectáculo se llama),
    y ello en un Publicado de Ejecutables:

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

    Lo tengo de Aleks G la respuesta a Cambio de posición de la caja de Diálogo en la pantalla de android .

    OriginalEl autor samis

  3. 2

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

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setStyle(STYLE_NO_FRAME, getTheme());
    }
    Esto elimina el título del cuadro de diálogo así

    OriginalEl autor Andrey Petrov

  4. 1

    Crear su propio Personalizado de diálogo se extiende con FragmentDailog
    y reemplazar 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 me funciona en el caso de DialogFragment y BottomSheetDialogFragment

    OriginalEl autor Abhishek

Dejar respuesta

Please enter your comment!
Please enter your name here