I'm playing around with some keyboard development and try to show a pop-up dialog when a certain key is pressed
if (primaryCode == -301) {
AlertDialog mDialog = new AlertDialog.Builder(CONTEXT)
.setTitle("My dialog")
.setMessage("Lets do it.")
.setPositiveButton("ok", null).create();
mDialog.show();
}
However, the problem is the CONTEXT
part. In a normal application it would just be this
. I also tried getApplicationContext()
and getBaseContext()
, but neither of those works -> keyboard crashes.
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not for an application
So I'm wondering if I have to do something with InputConnection:
The InputConnection interface is the communication channel from an InputMethod back to the application that is receiving its input. It is used to perform such things as reading text around the cursor, committing text to the text box, and sending raw key events to the application.
So far I wasn't able to figure out how. I definitely know it's possible, since I have seen it before. I someone could point me in the right direction that would definitely be appreciated.
Update:
To provide a better picture of what I try to achieve I uploaded a screenshot of the Swype keyboard, which does exactly that: showing a pop-up dialog when a special key gets pressed on the keyboard.
You have to get a reference to your activity context. Anyway, you should use the showDialog method of the Activity.
its very simple, just create activity like here (with out any view), write code of dialog in it
now go to Android manifest file and add activity like,
its all, enjoy
Make an activity and in the manifest file give that activity the attribute
Peace be upon those who follow the guidance,
solution :
good luck.
An IME does not run in an application context, so you can not use normal application windows. You can use a Dialog, but you will need to modify its window so that the window type is this type:
http://developer.android.com/reference/android/view/WindowManager.LayoutParams.html#TYPE_APPLICATION_PANEL
And set WindowManager.LayoutParams.token to be the token of the IME window (via View.getWindowToken()).
Note that the dialog will not be able to display pop-up windows, because in this case it is itself effectively a pop-up window. Also the coordinate space will be relative to your IME unless you use the window flags to change it.