Android: EditText в диалоговом окне не отображает программную клавиатуру

Итак, у меня есть то, что кажется общей проблемой, а именно то, что EditText в моем диалоговом окне не отображается когда он получает фокус. Я видел несколько обходных путей, например, в этой ветке , этой и этой (и многих других), но я никогда не видел удовлетворительного объяснения для , почему это происходит в первую очередь.

Я бы предпочел, чтобы Android использовал свое собственное поведение по умолчанию для EditTexts, чем создавать мое собственное, но похоже, что все (в этих потоках) согласились с тем, что поведение по умолчанию для EditTexts в диалогах заключается в том, чтобы просто указывать курсор и нет клавиатуры. Почему это могло быть?

Для справки, ни один из этих обходных путей, похоже, не работает для меня - самое близкое, что я смог найти, - это заставить клавиатуру появляться под диалоговым окном (используя InputMethodManager.toggleSoftKeyboard (*)). Моя конкретная конфигурация - API15, EditText отображается в нижнем колонтитуле ListView в AlertDialog. Установлен EditText android: focusable = "true", и onFocusChangeListener получает события фокуса.

Изменить:

По запросу, вот конкретный фрагмент кода, с которым я работаю. Я не буду беспокоиться обо всем макете, но в этом конкретном приложении EditText появляется в ответ на нажатие кнопки в диалоговом окне (аналогично представлению действий ). Он содержится в RelativeLayout, который по умолчанию имеет видимость «ушел»:

 

        

        

        
   

Код, который строит это, устанавливает видимость relativeLayout в «Visible» (и скрывает другие элементы пользовательского интерфейса). Этого должно быть достаточно, чтобы поднять клавиатуру, когда EditText сфокусируется, на основании моего опыта работы с EditText. Однако по некоторым причинам это не так.Я могу установить следующее onFocusChangeListener:

    edit_text.setOnFocusChangeListener(new OnFocusChangeListener() {

            @Override
            public void onFocusChange(View v, boolean hasFocus) {
                // For whatever reason we need to request a soft keyboard.
                    InputMethodManager imm = (InputMethodManager)dlg.getWindow().getContext().getSystemService(_Context.INPUT_METHOD_SERVICE);
                    if(hasFocus)
                        imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
                    Log.v("DialogProblem", "Focus requested, " + (hasFocus?"has focus.":"doesn't have focus."));
                }
            }
        });

Используя эту конфигурацию, когда я сначала ввожу EditText, срабатывает onFocusChangedListener и генерирует журнал, который неизменно выглядит следующим образом:

Focus requested, has focus.
Focus requested, doesn't have focus.
Focus requested, has focus.

Появляется клавиатура, а затем исчезает, вероятно, потому, что я переключаю его дважды, но даже когда я проверяю, что он остается включенным, он позади диалогового окна (в серой области), и нет способа добраться до него, не закрывая диалоговое окно .

Тем не менее, я хотел бы подчеркнуть, что даже при том, что я могу заставить это обходное решение работать, я в первую очередь заинтересован в поиске простой причины , почему EditText вообще не запускается, и почему это кажется таким обычным явлением!

79
задан Community 23 May 2017 в 12:10
поделиться