Question

J'utilise un DialogFragment, et même si j'ai réussi à définir une image pour fermer (c'est-à-dire le rejet) la boîte de dialogue lorsqu'elle est enfoncée, j'ai du mal à trouver le moyen de rejeter la boîte de dialogue lorsque l'utilisateur clique n'importe où à l'extérieur, tout comme il fonctionne avec des dialogues normaux. Je pensais qu'il y aurait une sorte de

dialogFragment.setCanceledOnTouchOutside(true);

Appelez, mais je ne vois pas cela dans la documentation.

Est-ce possible avec DialogFragment du tout? Ou est-ce que je regarde aux mauvais endroits? J'ai essayé d'intercepter les événements tactiles dans l'activité «parent», mais en plus de ne pas avoir d'événement de contact, cela ne me semblait pas juste.

Était-ce utile?

La solution

DialogFragment.getDialog().setCanceledOnTouchOutside(true);

Doit être appelé onCreateView (comme l'a souligné Apurv Gupta).

Autres conseils

    @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;
    }

Beaucoup de réponses ici mais, l'application se bloque lorsque la boîte de dialogue s'ouvre. L'écriture getDialog().setCanceledOnTouchOutside(true); à l'intérieur onCreateView Je n'ai pas fonctionné et j'ai écrasé mon application.

(J'utilise AppCompatActivity comme ma base-éactivité et android.app.DialogFragment comme mon fragment).

Ce qui fonctionne, ce sont les deux lignes suivantes:

getDialog (). setCanceLedontouchoutside (true);

OU

this.getDialog (). setCanceLedontouchoutside (true);

à l'intérieur onActivityCreated Comme

@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
    }

Que ne pas utiliser:

DialogFragment.getDialog (). SetCanceLedontouchoutside (false);

lance l'erreur suivante

enter image description here

Et écrire le code dans onCreateView Crashe l'application! Veuillez mettre à jour la réponse si vous trouvez quelque chose de mal.

DialogFragment.getDialog().setCanceledOnTouchOutside(false);

C'était une mauvaise compression. J'ai eu le même problème. Cela fonctionne bien pour Java et Mono pour Android Mono sera:

this.getDialog().SetCanceledOnTouchOutside(false);

Je recommanderais d'utiliser ma solution uniquement après avoir essayé les solutions ci-dessus. J'ai décrit ma solution ici. Juste pour bref, je vérifie les limites tactiles de DialogFragment.getView (). Lorsque les points de contact sont en dehors du dialogue, je rejette la boîte de dialogue.

            Dialog.SetCanceledOnTouchOutside(true);

A travaillé pour moi
Mon code

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;
            }
    }
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top