Подтвердить что ты не робот

Показать мягкую клавиатуру для диалога

Я показываю диалог с видом edittext. Тем не менее, программная клавиатура откроется, только если пользователь нажимает на редактирование. Поэтому я попытался вызвать InputMethodManager со следующим кодом.

InputMethodManager imm =
 (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(dialogField,0);

Диалоговое окно - это поле ввода. Однако, когда я должен это делать? Я попробовал его в методе onStart() диалога, но ничего не происходит. Я также попробовал запросить фокус для dialogField раньше, но это ничего не меняет.

Я также пробовал этот код

dialogField.setOnFocusChangeListener(new View.OnFocusChangeListener()
{
    public void onFocusChange (View v, boolean hasFocus)
    {
        if (hasFocus)
        {
            Main.log("here");
            dialogInput.getWindow().setSoftInputMode(
              WindowManager.LayoutParams.SOFT_INPUT_STATE_ALWAYS_VISIBLE);
            /*
                InputMethodManager mgr =
                  (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
                mgr.showSoftInput(dialogField,0);
            */
        }
    }
});

в обеих версиях. Но никакая мягкая клавиатура не хотела бы появляться. Main.log - это всего лишь журнал, который показывает мне, что функция фактически вызвана. И да, это называется.

Я могу получить клавиатуру с символом SHOW_FORCED перед открытием диалогового окна. Но тогда он не будет закрываться при выходе. И я могу сделать это только до того, как я покажу диалог. Внутри любых обратных вызовов это тоже не работает.

4b9b3361

Ответ 1

Удивительный вопрос, я тоже пытался это сделать и нашел решение.

С помощью класса построителя диалогового окна AlertDialog.Builder вам нужно будет вызвать диалоговое окно следующим образом:

AlertDialog.Builder builder = new AlertDialog.Builder();
AlertDialog dialog;

builder.set...

dialog = builder.create();
dialog.getWindow().setSoftInputMode(LayoutParams.SOFT_INPUT_STATE_VISIBLE);
dialog.show();

Это сработало для меня.

Примечание: вы должны import android.view.WindowManager.LayoutParams; для постоянного значения.

Ответ 2

Попробуйте это

InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                    imm.hideSoftInputFromWindow(edttxt.getWindowToken(), 0);

Для закрытия

InputMethodManager imm = (InputMethodManager)getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.hideSoftInputFromWindow(edttxt.getWindowToken(), 0);

Ответ 3

Это кажется невозможным.

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

Также обратите внимание, что тестирование эмулятора с помощью жестких клавиш не откроет клавиатуру для SHOW_IMPLICIT или флага 0.