android - soft - inputmethodservice




当使用带有EditText的AlertDialog.Builder时,软键盘不会弹出 (7)

我正在使用AlertDialog.Builder创建一个输入框,其中EditText作为输入方法。

不幸的是,软键盘不会弹出,虽然EditText是焦点,除非你明确地再次触摸它。

有没有办法强制它弹出?

(AlertDialog.Builder).show()后,我尝试了以下内容 但无济于事。

InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(input, InputMethodManager.SHOW_FORCED);

任何人都可以帮忙

谢谢!!


here给出here一个更好的解决方案。

dialog.getWindow().clearFlags(
         WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE
        |WindowManager.LayoutParams.FLAG_ALT_FOCUSABLE_IM);

没有解决方法。 EditText行为如预期。


在我的情况下,当显示Dialog时,我能够显示键盘的唯一方法是添加到我的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.

我做了这样的事情

AlertDialog.Builder b = new AlertDialog.Builder(this);//....
AlertDialog dialog = b.create();

dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);

dialog.show();

我发现相同的代码在平板电脑上正常工作,键盘会弹出,但在电话上它不会,因此进一步研究似乎指向“调整”选项。

我使用这个,感觉更清洁。

AlertDialog d = builder.create();
d.getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
d.show();

试试这个,它为我工作

如果你想显示软键盘:

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);

这已经here回答了。 使用OnFocusChangeListener为我工作。


final AlertDialog.Builder alert = new AlertDialog.Builder(context);

final AlertDialog dialog = alert.show();
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);




android-input-method