当使用带有EditText的AlertDialog.Builder时,软键盘不会popup
我正在使用AlertDialog.Builder创build一个input框,以EditText作为input法。
不幸的是,软键盘不会popup,虽然EditText是焦点,除非你明确地再次触摸它。
有没有办法强制它popup?
(AlertDialog.Builder).show(); 但无济于事。
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE); mgr.showSoftInput(input, InputMethodManager.SHOW_FORCED);
任何人都可以帮忙
谢谢!!
我做了这样的事情
AlertDialog.Builder b = new AlertDialog.Builder(this);//.... AlertDialog dialog = b.create(); dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE); dialog.show();
我已经设法解决这个问题:
Dialog = builder.create(); Dialog.show(); Dialog.getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); Dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
我发现,相同的代码在平板电脑上正常工作,键盘会popup,但在电话上它没有,所以进一步研究,似乎指向“调整”选项。
我使用这个,感觉更清洁。
AlertDialog d = builder.create(); d.getWindow().setSoftInputMode( WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE); d.show();
当您调用showDialog来显示在onCreateDialog中使用AlertDialog创build的对话
你应该把代码放在这里
@Override protected void onPrepareDialog (int id, Dialog dialog, Bundle args) { TextView editText=(TextView) dialog.findViewById(R....); editText.setOnFocusChangeListener(new View.OnFocusChangeListener() { @Override public void onFocusChange(View v, boolean hasFocus) { if (hasFocus) { dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); } } }); }
这里给出了一个更好的解决scheme。
dialog.getWindow().clearFlags( WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE |WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);
没有解决方法。 EditText
行为如预期。
Window window = dialog.getWindow(); window.clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); window.setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
这已经在这里回答了。 使用OnFocusChangeListener为我工作。
试试这个,它为我工作
如果你想显示软键盘:
InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.showSoftInput(input.getWindowToken(), 0);
如果你想隐藏它:
InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE); imm.hideSoftInputFromWindow(input.getWindowToken(), 0);
final AlertDialog.Builder alert = new AlertDialog.Builder(context); final AlertDialog dialog = alert.show(); dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
在我的情况下,当显示对话框时,我能够显示键盘的唯一方法是添加到我的DialogFragment
:
@Override public void onResume() { super.onResume(); getDialog().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM); getDialog().getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE); myEditText.requestFocus(); }
请注意SOFT_INPUT_STATE_ALWAYS_VISIBLE而不是SOFT_INPUT_STATE_VISIBLE 。
从文档:
int SOFT_INPUT_STATE_ALWAYS_VISIBLE Visibility state for softInputMode: please always make the soft input area visible when this window receives input focus.