Wie kann ich ein DialogFragment schließen, wenn ich außerhalb des Dialogfelds drücke?

StackOverflow https://stackoverflow.com/questions/8404140

  •  28-10-2019
  •  | 
  •  

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.

War es hilfreich?

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

 Bildbeschreibung hier eingeben

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

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top