Domanda

Sto usando un DialogFragment e, sebbene abbia impostato correttamente un'immagine per chiudere (cioè chiudere) la finestra di dialogo quando viene premuto, ho difficoltà a trovare il modo di chiudere la finestra di dialogo quando l'utente fa clic in un punto qualsiasi al di fuori di essa,poiché funziona con i normali dialoghi.Ho pensato che ci sarebbe stata una sorta di

dialogFragment.setCanceledOnTouchOutside(true);

chiama, ma non lo vedo nella documentazione.

È possibile con DialogFragment?O sto cercando nei posti sbagliati?Ho provato a intercettare gli eventi di tocco nell'attività "genitore" ma, a parte non ricevere alcun evento di tocco, non mi è sembrato giusto.

È stato utile?

Soluzione

DialogFragment.getDialog().setCanceledOnTouchOutside(true);

Deve essere chiamato in onCreateView (come ha sottolineato Apurv Gupta).

Altri suggerimenti

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

Molte risposte qui, ma l'app si blocca quando si apre la finestra di dialogo. La scrittura di getDialog().setCanceledOnTouchOutside(true); all'interno di onCreateView non ha funzionato e la mia app si è arrestata in modo anomalo.

(Sto utilizzando AppCompatActivity come BaseActivity e android.app.DialogFragment come frammento).

Ciò che funziona è una delle due seguenti righe:

getDialog (). setCanceledOnTouchOutside (true);

OPPURE

this.getDialog (). setCanceledOnTouchOutside (true);

all'interno di onActivityCreated come

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

Cosa non usare:

DialogFragment.getDialog (). setCanceledOnTouchOutside (false);

genera l'errore seguente

 inserisci qui la descrizione dell'immagine

E scrivendo il codice in onCreateView l'App si blocca! Aggiorna la risposta se trovi qualcosa che non va.

DialogFragment.getDialog().setCanceledOnTouchOutside(false);

È stato un errore di battitura.Ho avuto lo stesso problema.Funziona bene per Java e Mono per Android Mono sarà:

this.getDialog().SetCanceledOnTouchOutside(false);

Consiglierei di utilizzare la mia soluzione solo dopo aver provato le soluzioni di cui sopra.Ho descritto la mia soluzione qui .Solo in breve, sto controllando i limiti di tocco di DialogFragment.getView ().Quando i punti di contatto sono al di fuori di DialogFragment, chiudo la finestra di dialogo.

            Dialog.SetCanceledOnTouchOutside(true);

Ha funzionato per me
Il mio codice

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;
            }
    }
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top