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
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);
}
};
}
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)
}
}
}
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With