Keyboard 从IME创建PopupWindow:BadTokenException
我正在尝试从没有活动的IME服务(屏幕键盘)中显示一个弹出窗口。当我调用popUp.showAtLocation(layout,Gravity.CENTER,0,-100)时,我得到一个“Windowmanager$BadTokenException:无法添加窗口--标记null无效”。我知道从没有关联活动的服务打开弹出窗口有点不寻常--可能吗 这是我的密码:Keyboard 从IME创建PopupWindow:BadTokenException,keyboard,popupwindow,ime,Keyboard,Popupwindow,Ime,我正在尝试从没有活动的IME服务(屏幕键盘)中显示一个弹出窗口。当我调用popUp.showAtLocation(layout,Gravity.CENTER,0,-100)时,我得到一个“Windowmanager$BadTokenException:无法添加窗口--标记null无效”。我知道从没有关联活动的服务打开弹出窗口有点不寻常--可能吗 这是我的密码: public void initiatePopupWindow() { try { LayoutInflate
public void initiatePopupWindow()
{
try {
LayoutInflater inflater = (LayoutInflater) this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.popup_layout,null);
// create a 300px width and 470px height PopupWindow
popUp = new PopupWindow(layout, 300, 470, true);
popUp.showAtLocation(layout, Gravity.CENTER, 0, -100);
Button cancelButton = (Button) layout.findViewById(R.id.popup_cancel_button);
cancelButton.setOnClickListener(inputView.cancel_button_click_listener);
} catch (Exception e) {
e.printStackTrace();
}
}
任何帮助都将不胜感激。谢谢我发现了问题——我试图使用布局绘制弹出窗口,并使用与父级相同的布局。解决方案是将父视图设置为另一个视图。我发现它还可以导入,以确保在创建弹出窗口之前创建了视图(例如,通过使用处理程序/runnable)
public void initiatePopupWindow()
{
try {
Log.i("dotdashkeyboard","initiatePopupWindow (from IME service)");
LayoutInflater inflater = (LayoutInflater) this.getBaseContext().getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View layout = inflater.inflate(R.layout.popup_layout,null);
// create a 300px width and 470px height PopupWindow
popUp = new PopupWindow(layout, 300, 470, false);
popUp.showAtLocation(inputView, Gravity.CENTER, 0, -100);
Button cancelButton = (Button) layout.findViewById(R.id.popup_cancel_button);
cancelButton.setOnClickListener(inputView.cancel_button_click_listener);
} catch (Exception e) {
e.printStackTrace();
}
}