Reputation: 2371
I need to intercept all touch events in the application to monitor for a custom activity time out.
Currently I use dispatchTouchEvent()
in my activities but this is not called if I have a dialog on the screen. Does any one know if there any way I can have this same functionality with a dialog being present?
Thanks
Upvotes: 7
Views: 4196
Reputation: 607
Enjoy a Kotlin version everyone:
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)
}
}
}
}
Upvotes: 2
Reputation: 496
For use dispatchTouchEvent()
in DialogFragment, override onCreateDialog
and return a custom Dialog
with dispatchTouchEvent
(in your custom DialogFragment).
Exemple, for dismiss keyboard when click outside in 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);
}
};
}
Upvotes: 9