当我单击 TextInputEditText 时,是 a
LinearLayout
以编程方式添加到 AlertDialog
的父级,我的键盘不显示(在多个设备上测试)
首先,我创建一个新的
LinearLayout
并向其添加一个新的 Spinner
。
选择微调器上的最后一个项目后,我从 LinearLayout
中删除微调器并添加 TextInputEditText
:
layout.removeAllViews();
layout.addView(input);
当我点击
TextInputEditText
时,它会聚焦,但没有弹出软键盘
但是如果我将
直接添加为TextInputEditText
到View
,键盘会弹出并正确显示。AlertDialog
我的
AndroidManifest.xml
没有特殊条目。
我的完整代码:
private void dialogAddContact() {
ArrayList<String> mails = new ArrayList<>();
final LinearLayout layout = new LinearLayout(this);
final TextInputEditText input = new TextInputEditText(this);
final Spinner sp = new Spinner(this);
layout.addView(sp);
layout.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
input.setInputType(InputType.TYPE_CLASS_TEXT);
input.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
[....]
final ArrayAdapter<String> adp = new ArrayAdapter<>([....]);
sp.setLayoutParams(new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT));
sp.setAdapter(adp);
sp.setOnItemSelectedListener(new AdapterView.OnItemSelectedListener() {
@Override
public void onItemSelected(AdapterView<?> parent, View view, int position, long id) {
Log.d(Tools.LOGTAG, position + " " + totalMails);
if(position == totalMails - 1){
/****** Here i remove the spinner and add the input ****/
layout.removeAllViews();
layout.addView(input);
}
}
[....]
});
final AlertDialog.Builder builder = new AlertDialog.Builder(this)
.setView(layout, 50, 0, 50, 0)
[....]
});
dialog = builder.create();
dialog.show();
}
#. 将焦点更改侦听器添加到
TextInputEditText
并在 onFocusChange()
中使用 .toggleSoftInput(InputMethodManager.SHOW_FORCED, 0)
显示键盘。
需要打开键盘:
final TextInputEditText input = new TextInputEditText(this);
// Keyboard
final InputMethodManager imm = (InputMethodManager) this.getSystemService(Context.INPUT_METHOD_SERVICE);
// Auto show keyboard
input.setOnFocusChangeListener(new View.OnFocusChangeListener() {
@Override
public void onFocusChange(View v, boolean isFocused) {
if (isFocused) {
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
}
}
});
#. 当按下对话框的
hide
时,使用以下代码来 button
键盘。
需要隐藏键盘:
// Hide keyboard
imm.hideSoftInputFromWindow(input.getWindowToken(), 0);
希望对你有帮助~
我遇到了同样的问题,但任何给定的解决方案都不起作用,然后我使用它的父类(即
Dialog
)而不是AlertDialog
。这对我有用。
如果您想在对话框打开时显示键盘,您可以在
dialog.show()
之后添加此内容:
InputMethodManager imm = (InputMethodManager) getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_IMPLICIT_ONLY);
此代码对我有用。
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED,InputMethodManager.HIDE_IMPLICIT_ONLY);
唯一对我有用的是使用简单的对话框而不是 AlertDialog...