Dialog或DialogFragment中的Activity是否存在dispatchTouchEvent()的等效项

时间:2013-04-15 20:36:14

标签: android dialog ontouchevent android-dialogfragment

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

目前我在我的活动中使用dispatchTouchEvent(),但如果屏幕上有对话框,则不会调用此项。有没有人知道我是否可以通过对话框获得相同的功能?

由于

2 个答案:

答案 0 :(得分:5)

要在DialogFragment中使用dispatchTouchEvent(),请覆盖onCreateDialog并返回带有Dialog的自定义dispatchTouchEvent(在您的自定义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);
        }

    };
}

答案 1 :(得分:0)

享受 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)
            }
        }
    }

}