我想在用户触摸对话框 fragment 之外时执行一些任务。我该怎么做?
在我的 custmom 对话框 fragment 中有一段代码可以防止触摸外部时关闭对话框:
getDialog().setCanceledOnTouchOutside(false);
最佳答案
然后您需要删除 getDialog().setCanceledOnTouchOutside(false);
并使用一些反射来利用 Window
的隐藏方法来决定何时关闭对话框:
override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
return object : Dialog(activity as Context, theme) {
override fun onTouchEvent(event: MotionEvent): Boolean {
if (dialogShouldCloseOnTouch(window, context, event)) {
// do custom logic
return true
} else {
return super.onTouchEvent(event)
}
}
}
}
private fun dialogShouldCloseOnTouch(
window: Window,
context: Context,
event: MotionEvent): Boolean {
val method = window.javaClass.getMethod("shouldCloseOnTouch", Context::class.java, MotionEvent::class.java)
return method.invoke(window, context, event) as Boolean
}
关于android - 如何检测用户何时触摸对话框 fragment 外部?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39847857/