繁体   English   中英

Android:如何在触摸外部时关闭 DatePicker DialogFragment?

[英]Android: how to dismiss a DatePicker DialogFragment when touching outside?

我有一个扩展 DialogFragment 的工作 DatePickerFragment。 我在 onCreateDialog() 中设置了一个 DatePickerDialog,然后尝试添加:

“picker.setCanceledOnTouchOutside(真);”

我正在使用 Android 8.0 Oreo 的设备上进行测试,在 DatePicker 对话框之外触摸时没有任何反应。 我使用 androidx.appcompat.app.AppCompatActivity 作为我的 BaseActivity 和 androidx.fragment.app.DialogFragment 作为 DialogFragment;

代码:

@Override
public Dialog onCreateDialog(Bundle savedInstanceState) {
    super.onCreateDialog(savedInstanceState);

    DatePickerDialog picker = new DatePickerDialog(getActivity(),this,year,month,day);
    **picker.setCanceledOnTouchOutside(true);**
    return picker;

这是创建片段的活动代码:

DatePickerFragment newFragment = new DatePickerFragment();
// tried the below also, with no luck
**newFragment.setCancelable(true);**
newFragment.show(getSupportFragmentManager(), "datePicker");

我还在 DialogFragment 中尝试了以下内容,但也没有运气:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
   ...
   getDialog().setCanceledOnTouchOutside(true);
   ... 
   }

和:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
    if (getDialog() != null) {
        getDialog().setCanceledOnTouchOutside(true);
    }
    return super.onCreateView(inflater, container, savedInstanceState);
}    

我参考了这篇文章以获得可能的答案: How to dismiss a DialogFragment when pressing outside the dialog? . 我在这里错过了什么?

如果你想关闭扩展 DialogFragment 的 Dialog,写

设置取消(真);

在 onCreateView 里面。 当您触摸外部时,对话框将关闭。

示例代码:

@Override
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
     setCancelable(true);
     return super.onCreateView(inflater, container, savedInstanceState);
}

您是否尝试将对话框设置为可取消

picker.setCancelable(true);

我以为我有类似的问题,但在我的情况下,对话框似乎有一些阴影填充,我不得不在它的外部非常靠近屏幕边缘的地方单击以取消它。

这就是我创建对话框的方式:

val calendar = Calendar.getInstance()
val year = calendar.get(Calendar.YEAR)
val month = calendar.get(Calendar.MONTH)
val day = calendar.get(Calendar.DAY_OF_MONTH)

val dpd = context?.let {
    DatePickerDialog(it, DatePickerDialog.OnDateSetListener { _, pickedYear, pickedMonth, pickedDay ->

         //do something with picked date.

    }, year, month, day)
}

dpd?.setCanceledOnTouchOutside(true)
dpd?.show()

尝试在您的实现中设置setCanceledOnTouchOutside(true)并尝试在非常靠近屏幕边缘的地方点击关闭它,也许在一些大屏幕模拟器(如 Pixel 3 XL)上测试它。 现在我知道这不是解决方案,你需要处理所有类型的设备和屏幕尺寸,但我希望你确认你可能遇到与我相同的问题:该对话框在触摸外部时取消,但是这个“外部" 不是那么明显,这可能是一个真正的问题。

只需在 Dialog onCreate 方法或构造函数中添加 setCancelable(true)

尝试使用Android的默认日期PickerDialog,在选择对话框的一侧时,默认值关闭。

尝试这仍然是问题让我知道将发送相同的正确代码

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM