6

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

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

谢谢

4

2 回答 2

9

为了dispatchTouchEvent()在 DialogFragment 中使用,覆盖onCreateDialog并返回一个自定义DialogdispatchTouchEvent在您的自定义 DialogFragment 中)。

例如,在 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);
        }

    };
}
于 2017-02-13T12:34:37.173 回答
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)
            }
        }
    }

}
于 2021-05-21T10:05:43.017 回答