Как заставить Soft Keyboard появляться, когда я показываю диалог с EditText? - PullRequest
4 голосов
/ 04 апреля 2011

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

Мне удалось это сделать, добавив:

imm = (InputMethodManager) EditDialog.this.getContext().getSystemService(Context.INPUT_METHOD_SERVICE);
imm.toggleSoftInput(InputMethodManager.SHOW_FORCED, InputMethodManager.HIDE_NOT_ALWAYS);

в мой onCreate () изнастраиваемое диалоговое окно и

imm.hideSoftInputFromWindow(editText.getWindowToken(), 0);

в моем dismiss () .

Это открывает клавиатуру, когда диалоговое окно появляется, и также закрывает клавиатуру, когда я нажимаю "OK".Кнопка ".

Однако, если программная клавиатура открыта, и я нажимаю кнопку HOME на моем телефоне / эмуляторе, они останутся открытыми, поскольку, как я понял, я открываю ее с помощью SHOW_FORCED.Таким образом, я попытался скрыть (используя toggleSoftInput () из InputMethodManager) клавиатуру, если она открыта в методе родительского действия диалогового окна onPause ().кажется, что это возможно только при использовании обходного пути, как видно ЗДЕСЬ .

TL; DR : я хочу, чтобы экранная клавиатура отображалась, когда мой диалог с EditTextи кнопка появляется (фокус на EditText).Я получил это, но это потребовало написания множества хаков, чтобы закрыть правильно.

Редактировать : я основал свой код на ЭТОМ

Ответы [ 3 ]

3 голосов
/ 27 апреля 2011

Здесь ответили здесь , и это прекрасно работает для меня. Если я нажимаю кнопку «Домой» во время отображения клавиатуры, она правильно скрывается после нажатия клавиши «Домой».

0 голосов
/ 28 апреля 2016
@Override
public void onResume() {
    super.onResume();
    Handler handler = new Handler();
    handler.postDelayed(new Runnable() {
        @Override
        public void run() {
            try {
                InputMethodManager imm = (InputMethodManager) context.getSystemService(Context.INPUT_METHOD_SERVICE);
                imm.toggleSoftInputFromWindow(view.getWindowToken(), InputMethodManager.SHOW_FORCED, 0);
            } catch (Exception e) {

            }
        }
    }, 300);
}

И «просмотр» типа EditTextView.«контекст» - это текущий контекст.

Желание может помочь вам.

0 голосов
/ 09 апреля 2015
editTextProjectName.requestFocus();
InputMethodManager imm = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
imm.showSoftInput(editTextProjectName,
InputMethodManager.SHOW_IMPLICIT);
...