【问题标题】:Is there an equivalent for dispatchTouchEvent() from Activity in Dialog or DialogFragmentDialog 或 DialogFragment 中的 Activity 中的 dispatchTouchEvent() 是否有等价物
【发布时间】:2013-04-08 02:32:03
【问题描述】:

我需要拦截应用程序中的所有触摸事件以监控自定义活动超时。

目前我在我的活动中使用dispatchTouchEvent(),但如果我在屏幕上有一个对话框,则不会调用它。有谁知道是否有任何方法可以在存在对话框的情况下获得相同的功能?

谢谢

【问题讨论】:

  • 你有没有得到这个答案?
  • 不,从来没有,但我不再从事这个项目了。
  • @draksia @Jailbroken 我确实尝试过这个我在Activity 上从DialogdispatchTouchEvent() 调用了dispatchTouchEvent()。然而,实现这对我来说有点讨厌,因为我发现这不适用于ListViewGridViewOnItemClickListener,即你没有得到任何回调(仅在某些设备上)。不过,所有其他视图和布局都运行良好!

标签: android dialog touch-event android-dialogfragment


【解决方案1】:

每个人都享受 Kotlin 版本:

abstract class BaseDialogFragment : DialogFragment() {

    override fun onCreateDialog(savedInstanceState: Bundle?): Dialog {
        return object : Dialog(requireContext()){
            override fun dispatchTouchEvent(ev: MotionEvent): Boolean {
                // do your thing here
                return super.dispatchTouchEvent(ev)
            }
        }
    }

}

【讨论】:

    【解决方案2】:

    要在 DialogFragment 中使用 dispatchTouchEvent(),请覆盖 onCreateDialog 并使用 dispatchTouchEvent(在您的自定义 DialogFragment 中)返回自定义 Dialog

    例如,在DialogFragment中点击外部时关闭键盘:

    @NonNull
    @Override
    public Dialog onCreateDialog(Bundle savedInstanceState) {
        return new Dialog(getActivity(), getTheme()) {
            @Override
            public boolean dispatchTouchEvent(@NonNull MotionEvent motionEvent) {
                if (getCurrentFocus() != null) {
                    InputMethodManager inputMethodManager = (InputMethodManager) getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                    inputMethodManager.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
                }
                return super.dispatchTouchEvent(motionEvent);
            }
    
        };
    }
    

    【讨论】:

      猜你喜欢
      • 2012-04-29
      • 2015-11-03
      • 2016-01-19
      • 1970-01-01
      • 1970-01-01
      • 2020-07-10
      • 2011-05-29
      • 2014-01-04
      • 2016-06-08
      相关资源
      最近更新 更多