当使用带有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.