를 사용 DialogFragment
하고 있으며 눌렀을 때 대화 상자를 닫도록 (즉, 닫기) 이미지를 성공적으로 설정했지만 사용자가 대화 상자 외부를 클릭 할 때 대화 상자를 닫는 방법을 찾기가 어렵습니다. 일반 대화. 나는 일종의
dialogFragment.setCanceledOnTouchOutside(true);
전화했지만 문서에는 보이지 않습니다.
이것이 가능 DialogFragment
합니까? 아니면 잘못된 곳을 찾고 있습니까? 나는 ‘부모’활동에서 터치 이벤트를 가로 채려고했지만 터치 이벤트가없는 것 외에는 나에게 옳지 않은 것 같았다.
답변
DialogFragment.getDialog().setCanceledOnTouchOutside(true);
반드시 호출되어야합니다 onCreateView
(Apurv Gupta가 지적했듯이).
답변
@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;
}
답변
여기에 많은 답변이 있지만 대화 상자가 열리면 앱이 충돌합니다. getDialog().setCanceledOnTouchOutside(true);
내부 쓰기onCreateView
가 작동하지 않고 내 앱이 충돌했습니다.
(저는 AppCompatActivity
BaseActivity로 사용하고 있으며android.app.DialogFragment
Fragment로 사용하고 있습니다).
작동하는 것은 다음 두 줄 중 하나입니다.
getDialog (). setCanceledOnTouchOutside (true);
또는
this.getDialog (). setCanceledOnTouchOutside (true);
onActivityCreated
같은 내부
@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
}
사용하지 말아야 할 것 :
DialogFragment.getDialog (). setCanceledOnTouchOutside (false);
다음 오류가 발생합니다.
그리고 코드를 작성하면 onCreateView
앱이 충돌합니다! 잘못된 것을 찾으면 답변을 업데이트하십시오.
답변
DialogFragment.getDialog().setCanceledOnTouchOutside(false);
오해였다. 나는 같은 문제가 있었다. 이것은 Java에서 잘 작동하고 Android Mono의 Mono는 다음과 같습니다.
this.getDialog().SetCanceledOnTouchOutside(false);
답변
Dialog.SetCanceledOnTouchOutside(true);
나를 위해 일했다
내 코드
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;
}
}
답변
외부를 클릭 할 때 일부 논리를 실행 DialogFragment
하려면 onCancel 메서드를 재정의하면됩니다.
override fun onCancel(dialog: DialogInterface) {
super.onCancel(dialog)
// Do your work here
}