Come chiudere un DialogFragment quando si preme fuori dalla finestra di dialogo?
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.
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
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;
}
}