我需要截取应用程序中的所有触摸事件,以监视自定义活动超时。
目前我在我的活动中使用dispatchTouchEvent()
,但如果屏幕上有对话框,则不会调用此项。有没有人知道我是否可以通过对话框获得相同的功能?
由于
答案 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)
}
}
}
}