我正在创建自定义键盘。为此,我使用键盘按钮在按下时更改语言。当按下该按钮时,它将打开一个“警告”对话框,其中提供了可供选择的各种语言的列表。现在,当我添加相同的代码并在设备上运行该应用程序时,它显示错误“ android.view.WindowManager $ BadTokenException:无法添加窗口-令牌null无效;您的活动是否正在运行?” < / p>
我已经尝试搜索关于stackoverflow的答案,主要得到2条建议。
公共类VoiceInputMethodService扩展了InputMethodService {
String[] languages = {"English", "French", "Spanish", "Japanese", "Hindi",
"Chinese","Tamil","Bengali","Punjabi","Russian","Arabic",
"Indonesian","Turkish","Italian","Polish","Korean","Nepali"};
@Override
public View onCreateInputView() {
super.onCreateInputView();
keyboard = (LinearLayout) getLayoutInflater().inflate(R.layout.voice_keyboard_main, null);
ImageButton languageSelectorImageButton = keyboard.findViewById(R.id.globe_button);
languageSelectorImageButton.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
Log.d("Check","Button is Clicked");
createAlertDialog();
}
});
public void createAlertDialog(){ Log.d(“检查”,“内部创建警报对话框”); AlertDialog.Builder builder =新的AlertDialog.Builder(VoiceInputMethodService.this); Log.d(“ Check”,“我已经传递了上下文”); builder.setTitle(“ Language”);
// add a radio button list
int checkedItem = 1; // cow
builder.setSingleChoiceItems(languages, checkedItem, new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
int selectedPosition=((AlertDialog)dialog).getListView().getCheckedItemPosition();
// Log.d("Selection","User clicked on "+languages[selectedPosition]+" Language");
}
});
// add OK and Cancel buttons
builder.setPositiveButton("SELECT", new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// user clicked OK
int selectedPosition=((AlertDialog)dialog).getListView().getCheckedItemPosition();
//Log.d("Selection","User Selected "+languages[selectedPosition]+" Language");
}
});
builder.setNegativeButton("CANCEL", null);
// create and show the alert dialog
AlertDialog dialog = builder.create();
//WindowManager.LayoutParams lp = new WindowManager.LayoutParams();
//lp.copyFrom(Objects.requireNonNull(dialog.getWindow()).getAttributes());
//lp.width = WindowManager.LayoutParams.MATCH_PARENT;
// lp.height = WindowManager.LayoutParams.MATCH_PARENT;
dialog.show();
//dialog.getWindow().setAttributes(lp);
}
我使用相同的createAlertDialog函数创建了一个独立的应用程序,并通过按钮将其连接起来并且工作正常。 但是,当我在自定义键盘应用程序中使用此相同功能(按原样)时,按下按钮时会出现错误。 应用正在构建并正在运行,但是当我单击按钮以获取“语言选择”对话框时,我的应用崩溃并显示给我: “ android.view.WindowManager $ BadTokenException:无法添加窗口-令牌null无效;您的活动是否正在运行?”