Pregunta

estoy usando un DialogFragment, y aunque he configurado correctamente una imagen para que se cierre (es decir,descartar) el cuadro de diálogo cuando lo presiono, me cuesta encontrar la manera de descartar el cuadro de diálogo cuando el usuario hace clic en cualquier lugar fuera de él, tal como funciona con los cuadros de diálogo normales.Pensé que habría algún tipo de

dialogFragment.setCanceledOnTouchOutside(true);

Llame, pero no veo eso en la documentación.

¿Es esto posible con DialogFragment ¿en absoluto?¿O estoy buscando en los lugares equivocados?Intenté interceptar eventos táctiles en la actividad "principal" pero, aparte de no obtener ningún evento táctil, no me pareció correcto.

¿Fue útil?

Solución

DialogFragment.getDialog().setCanceledOnTouchOutside(true);

Debe ser llamado onCreateView (como señaló Apurv Gupta).

Otros consejos

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
       ...
       getDialog().setCanceledOnTouchOutside(true);
       ... 
       }
    /** The system calls this only when creating the layout in a dialog. */
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        // The only reason you might override this method when using onCreateView() is
        // to modify any dialog characteristics. For example, the dialog includes a
        // title by default, but your custom layout might not need it. So here you can
        // remove the dialog title, but you must call the superclass to get the Dialog.
        Dialog dialog = super.onCreateDialog(savedInstanceState);
        dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
        dialog.setCanceledOnTouchOutside(true);

        return dialog;
    }

Muchas respuestas aquí, pero la aplicación falla cuando se abre el cuadro de diálogo.Escribiendo getDialog().setCanceledOnTouchOutside(true); adentro onCreateView no funcionó y bloqueó mi aplicación.

(Estoy usando AppCompatActivity como mi BaseActivity y android.app.DialogFragment como mi Fragmento).

Lo que funciona es cualquiera de las dos líneas siguientes:

getDialog().setCanceledOnTouchOutside(verdadero);

O

this.getDialog().setCanceledOnTouchOutside(verdadero);

adentro onActivityCreated como

@Override
    public void onActivityCreated(Bundle savedInstanceState) {
        super.onActivityCreated(savedInstanceState);
        //getDialog().getWindow().getAttributes().windowAnimations = R.style.DialogAnimationZoom;
        //getDialog().getWindow().setDimAmount(0.85f);
        getDialog().setCanceledOnTouchOutside(true);//See here is the code
    }

Qué no usar:

DialogFragment.getDialog().setCanceledOnTouchOutside(false);

arroja el siguiente error

enter image description here

Y escribiendo el código en onCreateView bloquea la aplicación!Actualice la respuesta si encuentra algo incorrecto.

DialogFragment.getDialog().setCanceledOnTouchOutside(false);

Estaba escribiendo mal.Yo tuve el mismo problema.Esto funciona bien para Java y Mono para Android. Mono será:

this.getDialog().SetCanceledOnTouchOutside(false);

Recomendaría usar mi solución solo después de probar las soluciones anteriores.He descrito mi solución. aquí.Para resumir, estoy comprobando los límites táctiles de DialogFragment.getView().Cuando los puntos de contacto están fuera de DialogFragment, descarto el diálogo.

            Dialog.SetCanceledOnTouchOutside(true);

Trabajó para mi
Mi código

class dlgRegister : DialogFragment
        {
    public override View OnCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState)
            {
    ....
    ....
    }
    public override void OnActivityCreated(Bundle savedInstanceState)
            {
                Dialog.Window.RequestFeature(WindowFeatures.NoTitle);
                Dialog.SetCanceledOnTouchOutside(true);
                base.OnActivityCreated(savedInstanceState);
                Dialog.Window.Attributes.WindowAnimations =    Resource.Style.dialog_animation;
            }
    }
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top