J'utilise une DialogFragment
et, bien que j'aie paramétré avec succès une image pour fermer le dialogue lorsqu'elle est enfoncée, j'ai du mal à trouver le moyen de fermer le dialogue lorsque l'utilisateur clique n'importe où en dehors, comme cela fonctionne avec des dialogues normaux. Je pensais qu'il y aurait une sorte de
dialogFragment.setCanceledOnTouchOutside(true);
appeler, mais je ne le vois pas dans la documentation.
Est-ce possible avec DialogFragment
du tout? Ou est-ce que je cherche au mauvais endroit? J'ai essayé d'intercepter des événements tactiles dans l'activité 'parent', mais à part ne pas recevoir d'événement tactile, cela ne me semblait pas correct.
DialogFragment.getDialog().setCanceledOnTouchOutside(true);
Doit être appelé dans onCreateView
(comme l'a souligné Apurv Gupta).
@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 le blocage de l'application lorsque la boîte de dialogue s'ouvre. L'écriture de getDialog().setCanceledOnTouchOutside(true);
à l'intérieur de onCreateView
n'a pas fonctionné et mon application est tombée en panne.
(J'utilise AppCompatActivity
comme baseActivity et Android.app.DialogFragment
comme fragment).
Ce qui fonctionne est l'une des deux lignes suivantes:
getDialog (). setCanceledOnTouchOutside (true);
OR
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
}
Quoi ne pas utiliser:
DialogFragment.getDialog (). SetCanceledOnTouchOutside (false);
jette l'erreur suivante
Et écrire le code dans onCreateView
bloque l'application! Veuillez mettre à jour la réponse si vous trouvez que quelque chose ne va pas.
DialogFragment.getDialog().setCanceledOnTouchOutside(false);
C'était une erreur de frappe. 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 . Pour résumer, je vérifie les limites tactiles de DialogFragment.getView (). Lorsque les points de contact se trouvent en dehors de DialogFragment, je rejette le 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;
}
}