我需要拦截应用程序中的所有触摸事件,以监视自定义活动超时。
目前我在我的活动中使用dispatchTouchEvent()
,但是如果屏幕上有对话框,则不会调用此函数。 有没有人知道是否有办法在存在对话框的情况下实现相同的功能?
谢谢
我需要拦截应用程序中的所有触摸事件,以监视自定义活动超时。
目前我在我的活动中使用dispatchTouchEvent()
,但是如果屏幕上有对话框,则不会调用此函数。 有没有人知道是否有办法在存在对话框的情况下实现相同的功能?
谢谢
为在 DialogFragment 中使用 dispatchTouchEvent()
,请重写 onCreateDialog
并返回一个带有 dispatchTouchEvent
的自定义 Dialog
(在您的自定义 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);
}
};
}
大家好,这里提供了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)
}
}
}
}