¿Cómo descartar un DialogFragment al presionar fuera del diálogo?
Pregunta
estoy usando un DialogFragment
, y aunque he configurado correctamente una imagen para que se cierre (es decir,descartar) el cuadro de diálogo cuando lo presiono, me cuesta encontrar la manera de descartar el cuadro de diálogo cuando el usuario hace clic en cualquier lugar fuera de él, tal como funciona con los cuadros de diálogo normales.Pensé que habría algún tipo de
dialogFragment.setCanceledOnTouchOutside(true);
Llame, pero no veo eso en la documentación.
¿Es esto posible con DialogFragment
¿en absoluto?¿O estoy buscando en los lugares equivocados?Intenté interceptar eventos táctiles en la actividad "principal" pero, aparte de no obtener ningún evento táctil, no me pareció correcto.
Solución
DialogFragment.getDialog().setCanceledOnTouchOutside(true);
Debe ser llamado onCreateView
(como señaló Apurv Gupta).
Otros consejos
@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;
}
Muchas respuestas aquí, pero la aplicación falla cuando se abre el cuadro de diálogo.Escribiendo getDialog().setCanceledOnTouchOutside(true);
adentro onCreateView
no funcionó y bloqueó mi aplicación.
(Estoy usando AppCompatActivity
como mi BaseActivity y android.app.DialogFragment
como mi Fragmento).
Lo que funciona es cualquiera de las dos líneas siguientes:
getDialog().setCanceledOnTouchOutside(verdadero);
O
this.getDialog().setCanceledOnTouchOutside(verdadero);
adentro onActivityCreated
como
@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
}
Qué no usar:
DialogFragment.getDialog().setCanceledOnTouchOutside(false);
arroja el siguiente error
Y escribiendo el código en onCreateView
bloquea la aplicación!Actualice la respuesta si encuentra algo incorrecto.
DialogFragment.getDialog().setCanceledOnTouchOutside(false);
Estaba escribiendo mal.Yo tuve el mismo problema.Esto funciona bien para Java y Mono para Android. Mono será:
this.getDialog().SetCanceledOnTouchOutside(false);
Recomendaría usar mi solución solo después de probar las soluciones anteriores.He descrito mi solución. aquí.Para resumir, estoy comprobando los límites táctiles de DialogFragment.getView().Cuando los puntos de contacto están fuera de DialogFragment, descarto el diálogo.
Dialog.SetCanceledOnTouchOutside(true);
Trabajó para mi
Mi código
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;
}
}