簡體   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