Wie kann ich ein DialogFragment schließen, wenn ich außerhalb des Dialogfelds drücke?
Frage
Ich verwende einen DialogFragment
, und obwohl ich erfolgreich ein Bild so eingestellt habe, dass der Dialog beim Drücken geschlossen (dh geschlossen) wird, fällt es mir schwer, den Weg zu finden, um den Dialog zu schließen, wenn der Benutzer irgendwo außerhalb darauf klicktwie es mit normalen Dialogen funktioniert.Ich dachte, es würde eine Art geben
dialogFragment.setCanceledOnTouchOutside(true);
aufrufen, aber das sehe ich nicht in der Dokumentation.
Ist das überhaupt mit DialogFragment
möglich?Oder suche ich an den falschen Stellen?Ich habe versucht, Berührungsereignisse in der Aktivität "Eltern" abzufangen, aber abgesehen davon, dass ich kein Berührungsereignis erhalten habe, schien es mir nicht richtig zu sein.
Lösung
DialogFragment.getDialog().setCanceledOnTouchOutside(true);
Muss im onCreateView
aufgerufen werden (wie Apurv Gupta hervorhob).
Andere Tipps
@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;
}
Viele Antworten hier, aber die App stürzt ab, wenn der Dialog geöffnet wird.
Das Schreiben von getDialog().setCanceledOnTouchOutside(true);
in onCreateView
hat nicht funktioniert und meine App zum Absturz gebracht.
(Ich verwende AppCompatActivity
als meine BaseActivity und android.app.DialogFragment
als mein Fragment).
Was funktioniert, ist eine der beiden folgenden Zeilen:
getDialog (). setCanceledOnTouchOutside (true);
ODER
this.getDialog (). setCanceledOnTouchOutside (true);
innerhalb von
onActivityCreated
wie@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 }
Was Sie nicht verwenden sollten:
DialogFragment.getDialog (). setCanceledOnTouchOutside (false);
löst folgenden Fehler aus
Und das Schreiben des Codes in
onCreateView
stürzt die App ab! Bitte aktualisieren Sie die Antwort, wenn Sie etwas falsch finden.
DialogFragment.getDialog().setCanceledOnTouchOutside(false);
Es wurde falsch geschrieben.Ich hatte das gleiche Problem.Dies funktioniert gut für Java und Mono für Android Mono wird sein:
this.getDialog().SetCanceledOnTouchOutside(false);
Ich würde empfehlen, meine Lösung erst zu verwenden, nachdem Sie die obigen Lösungen ausprobiert haben.Ich habe meine Lösung hier beschrieben.Um es kurz zu machen, ich überprüfe die Berührungsgrenzen von DialogFragment.getView ().Wenn sich Berührungspunkte außerhalb von DialogFragment befinden, wird der Dialog geschlossen.
Dialog.SetCanceledOnTouchOutside(true);
Hat für mich gearbeitet
Mein 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;
}
}