I have a dialogfragment for a floating dialog which includes a special keyboard that pops up when a user presses inside an EditText field (the normal IME is stopped from being displayed).
I would like the keyboard to be dismissed (visibility = GONE) when the user presses the back button (just as with a normal IME service) but the dialog to remain visible. However, there does not appear to be a way to do this as far as I can see from my fairly extensive reading on SO and elsewhere.
If I set the dialog to be non-cancelable then I don't get notified by onCancel() or onDismiss() because the dialog isn't cancelable.
If I set the dialog to be cancelable then I get notified, but the dialog is dismissed.
I can't attach an onKeyListener to the dialog in the fragment because it is replaced by the system so that the fragment can handle the dialog's life cycle.
Is there any way to do this? Or has access to the detection of key events been entirely fenced off for the purposes of the Fragment system?
When creating the dialog, override both onBackPressed and onTouchEvent :
I had the same problem than you and I've fixed it attaching the onKeyListener to the dialogfragment.
In the method
onResume()
of the class that extend of DialogFragment put these piece of code:Here one of the problems that you can find is this code is going to be executed twice: one when the user press tha back button and another one when he leave to press it. In that case, you have to filter by event: