簡體   English   中英

如果鍵盤可見,則防止關閉 BottomSheetDialogFragment

[英]Prevent dismissal of BottomSheetDialogFragment if keyboard is visible

我有一個用例,其中 BottomSheetDialogFragment 有一個編輯文本,並且這個編輯文本是焦點。 並且鍵盤在 BottomSheetDialogFragment 的頂部打開。 要求是當用戶在對話框之外單擊時,應關閉第一個鍵盤而不關閉對話框。 這使用戶有機會重新單擊編輯文本並重新出現鍵盤。 一旦鍵盤處於隱藏 state 中,則如果用戶在對話框之外單擊,則對話框將被關閉。 但是當用戶在對話框之外單擊並且鍵盤可見然后對話框被關閉時,這不會發生。 我怎樣才能攔截觸摸事件來改變這種行為?

這是一個棘手的問題。 您可以做的事情是在BottomSheetDialogFragment可見時添加一個偵聽器,就像在這里一樣

bottomSheetDialog.isCancellable = true/false

我可以想到兩種方法來實現這一點。
首先是重寫 `BottomSheetDialogFragment#onCreateDialog` 方法並提供這樣的自定義對話框
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog { val dialog = object: BottomSheetDialog(requireContext()) { override fun onTouchEvent(event: MotionEvent): Boolean { /* detect touch outside here and hide keyboard */ return super.onTouchEvent(event) } } return dialog.apply { setCanceledOnTouchOutside(false) setContentView(R.layout.bottom_sheet_layout) } }

第二個是通過使用全屏DialogFragmentCoordiatorLayoutBottomSheetBehavior創建您自己的底部工作表對話框片段,並檢測何時單擊根容器並根據您的要求執行操作。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM