Comment rejeter un dialogue en appuyant sur la boîte de dialogue?
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.
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
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;
}
}