При использовании AlertDialog.Builder с EditText, Soft Keyboard не появляется

Я использую AlertDialog.Builder, чтобы создать поле ввода, с помощью EditText в качестве метода ввода.

К сожалению, Soft Keyboard не появляется, хотя EditText находится в фокусе, если вы явно не коснетесь его снова.

Есть ли способ заставить его pop?

Я пробовал следующее: после (AlertDialog.Builder).show();, но безрезультатно.

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

Любой может помочь?

Спасибо!!

+113
11 авг. '10 в 4:14
источник поделиться
10 ответов

Я сделал такую ​​вещь

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

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

dialog.show();
+218
20 июл. '11 в 9:00
источник

Мне удалось решить его вот так:

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);
+26
06 июн. '13 в 21:40
источник
другие ответы

Связанные вопросы


Похожие вопросы

Я узнал, что тот же самый код работает правильно на планшете, клавиатура всплывает, но на телефоне этого нет, поэтому, исследуя дальше, кажется, указывается на параметр "настроить".

Я использую это, чувствую себя намного чище.

AlertDialog d = builder.create();
d.getWindow().setSoftInputMode(
    WindowManager.LayoutParams.SOFT_INPUT_ADJUST_RESIZE);
d.show();
+23
20 мая '14 в 14:16
источник

В моем случае единственным способом показать клавиатуру, когда был показан диалог, было добавление к моему 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.
+8
15 сент. '17 в 22:16
источник

Когда вы вызываете showDialog, чтобы показать диалог, созданный с помощью AlertDialog в onCreateDialog

Здесь вы должны ввести код

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

}
+6
26 янв. '11 в 16:52
источник

Намного лучшее решение дано здесь.

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

Нет обходного пути. EditText ведет себя так, как ожидалось.

+5
31 мая '13 в 15:33
источник
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);
+2
12 мая '16 в 6:24
источник

На это уже был дан ответ здесь. Использование OnFocusChangeListener сработало для меня.

+1
09 сент. '10 в 19:27
источник
final AlertDialog.Builder alert = new AlertDialog.Builder(context);

final AlertDialog dialog = alert.show();
dialog.getWindow().setSoftInputMode(WindowManager.LayoutParams.SOFT_INPUT_STATE_VISIBLE);
0
07 янв. '17 в 21:23
источник

Попробуйте это, его работа для меня

Если вы хотите отобразить мягкую клавиатуру:

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);
0
30 мар. '16 в 11:12
источник

Посмотрите другие вопросы по меткам или Задайте вопрос