Java AlertDialog上没有键盘,因为对话框上没有焦点,但仍处于后台活动,如何修复?
我在对话框中的列表中创建了一个edittext。最初,edittext被禁用,通过点击对话框中的另一个按钮,我将其启用。我进一步调试了它,发现重点仍然放在后台活动上,这导致键盘进入后台活动 只是要指出:我的编辑文本是数字 尝试了多个选项,但没有结果: 我发现,在对话框打开后,键盘将使用此选项启动后台活动Java AlertDialog上没有键盘,因为对话框上没有焦点,但仍处于后台活动,如何修复?,java,android,dialog,keyboard,android-alertdialog,Java,Android,Dialog,Keyboard,Android Alertdialog,我在对话框中的列表中创建了一个edittext。最初,edittext被禁用,通过点击对话框中的另一个按钮,我将其启用。我进一步调试了它,发现重点仍然放在后台活动上,这导致键盘进入后台活动 只是要指出:我的编辑文本是数字 尝试了多个选项,但没有结果: 我发现,在对话框打开后,键盘将使用此选项启动后台活动 splitDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_
splitDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
这两个选项都无法打开“键盘打开”对话框
我还在XML生成过程中添加了editText框
我的对话框代码:
AlertDialog.Builder builder = new AlertDialog.Builder(this);
builder.setView(dialogView);
Dialog dialog = builder.create();
builder.setTitle("Split Balance");
builder.setPositiveButton("Ok", new SplitDialogCallback());
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
splitDialog.show();
请给我指路,因为我被这个问题困住了
当我直接在对话框中添加一个EditText而不是在对话框的列表视图中添加一个EditText时,一切正常,但若我删除它,则会再次出现相同的问题。无法理解,如果在列表视图中编辑文本,为什么焦点不移动。android键盘非常智能,您不需要以这种方式切换其输入。请尝试一次 删除此项:
InputMethodManager keyboard = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
keyboard.showSoftInput(null, InputMethodManager.SHOW_FORCED, null);
及
然后我建议使用自定义对话框布局而不是视图。试试这个
final Dialog splitDialog = new Dialog(this);
splitDialog.setContentView(R.layout.abc_action_bar_decoryour_dialog_layout);
//Button that you want to toggle the editText enabled
Button btn = splitDialog.findViewById(R.id.your_button);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
EditText editText =splitDialog.findViewById(R.id.your_edit_text);
editText.setEnabled(true);
editText.requestFocus();
}
});
splitDialog.show();
这是一个更好的使用对话框的方法,它给了你更多的自由,尤其是因为你使用自定义对话框布局
我知道这并不能说明你的方法不起作用的原因。但这只是一个处理得更好的解决方案谢谢,但由于EditText位于对话框内部的listview中,因此如何查找buttEditTexton,因为列表视图中可能有多行。我添加了一个变通方法,添加了一个高度和重量为0的虚拟edittext,这样android会认为对话框中有一个编辑文本,并打开一个键盘。但这不是一个合适的解决方案。您是否使用自定义列表视图?然后我建议在列表视图适配器中添加单击侦听器上的按钮,代码将保持不变。我目前了解您的列表项各有一个按钮和一个edittext。我是否正确?是的,您是对的。我目前没有使用自定义列表视图,而是通过单独的XML文件在列表视图中添加自定义视图。感谢您的帮助,我将尝试此解决方案。
splitDialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
final Dialog splitDialog = new Dialog(this);
splitDialog.setContentView(R.layout.abc_action_bar_decoryour_dialog_layout);
//Button that you want to toggle the editText enabled
Button btn = splitDialog.findViewById(R.id.your_button);
btn.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
EditText editText =splitDialog.findViewById(R.id.your_edit_text);
editText.setEnabled(true);
editText.requestFocus();
}
});
splitDialog.show();