[英]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.