Есть ли эквивалент для dispatchTouchEvent() из Activity in Dialog или DialogFragment

Мне нужно перехватить все события касания в приложении, чтобы отслеживать время пользовательской активности.

В настоящее время я использую dispatchTouchEvent() в своих действиях, но это не вызывается, если у меня есть диалог на экране. Кто-нибудь знает, есть ли способ, которым я могу иметь такую ​​же функциональность с присутствующим диалогом?

Спасибо

Ответ 1

Для использования dispatchTouchEvent() в DialogFragment переопределите onCreateDialog и верните пользовательский Dialog с помощью dispatchTouchEvent (в вашем настраиваемом диалоговом окне).

Например, если вы закрываете клавиатуру, когда вы нажимаете на нее в диалоговом окне 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);
        }

    };
}