Я работаю над настраиваемым приложением клавиатуры (не использую Keyboardview) и пытаюсь реализовать всплывающее окно при нажатии клавиши, и я использую всплывающее окно, чтобы отображать всплывающее окно при каждом нажатии клавиши. Он работает в большинстве случаев, но иногда выдает Bad Token Exception - Unable to add window - is your activity running?
Поскольку здесь нет активности и работает только служба InputMethod, я не уверен, как это решить.
Код, который я использую для отображения всплывающего окна
private void layoutAndShowPopupWindow(Key key, int xPosition, ViewGroup popupView) {
popupWindow = new PopupWindow(popupView, key.getWidth(), key.getHeight() * 2);
popupWindow.setOutsideTouchable(true);
popupWindow.setClippingEnabled(false);// <-- let popup display above keyboard
int[] location = new int[2];
key.getLocationInWindow(location);
int measureSpec = View.MeasureSpec.makeMeasureSpec(0, View.MeasureSpec.UNSPECIFIED);
popupView.measure(measureSpec, measureSpec);
int popupWidth = popupView.getMeasuredWidth();
int spaceAboveKey = 0;
int x = xPosition - popupWidth / popupView.getChildCount() / 3;
int y = location[1] - popupView.getMeasuredHeight() - spaceAboveKey;
popupWindow.showAtLocation(key, Gravity.NO_GRAVITY, x, y);
}
Ошибка:
android.view.WindowManager$BadTokenException: Unable to add window -- token null is not valid; is your activity running?
at android.view.ViewRootImpl.setView(ViewRootImpl.java:983)
at android.view.WindowManagerGlobal.addView(WindowManagerGlobal.java:398)
at android.view.WindowManagerImpl.addView(WindowManagerImpl.java:96)