私は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;
}
多くの回答がここにありますが、ダイアログが開くとアプリがクラッシュします。 onCreateView
内にgetDialog().setCanceledOnTouchOutside(true);
を書き込むと機能せず、アプリがクラッシュしました。
(BaseActivityとしてAppCompatActivity
を使用し、Android.app.DialogFragment
私のフラグメントとして)。
動作するのは、次の2行のいずれかです。
getDialog()。setCanceledOnTouchOutside(true);
OR
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およびMono for Android Monoは次のようになります。
this.getDialog().SetCanceledOnTouchOutside(false);
上記のソリューションを試した後にのみ、ソリューションを使用することをお勧めします。私のソリューションを説明しました here 。簡単に言うと、DialogFragment.getView()のタッチ境界を確認しています。タッチポイントがDialogFragmentの外側にある場合、ダイアログを閉じています。
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;
}
}