android - 如何检测用户何时触摸对话框 fragment 外部?

标签 android dialog android-dialogfragment

我想在用户触摸对话框 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/

相关文章:

android - 将动态序列化名称与 gson 匹配

android - android AVD屏幕上的两个圆圈

Android Espresso 测试 : how test an activity's onNewIntent?

jsf-2 - PrimeFaces 4.0 中的对话框框架不起作用

python - 如何将 "dialog"输出流式传输到标准输出?

android - 单击按钮时防止 DialogFragment 关闭

android - Dialog 在膨胀之前从 Activity 中删除 fragment

android - OSMDroid:使标记居中

android - MapFragment 样式为 Dialog 导致 TextView 透明

android - FragmentManager.findFragmentByTag() 返回 null