Как показать клавиатуру в PopupWindow? - PullRequest
4 голосов
/ 12 октября 2010

Я использую PopupWindow класс и на PopupWindow У меня есть один EditText, моя проблема в том, что когда PopupWindow виден, и я нажимаю EditText, в это время программная клавиатура не видна, и яЯ не могу войти.Кто-нибудь может подсказать, как решить эту проблему?

Ответы [ 4 ]

15 голосов
/ 14 декабря 2011

Когда вы создаете новый PopupWindow, используйте другой метод конструктора, вы должны установить focusable = true;, только вид может быть фокусируемым, отобразится экранная клавиатура.

public PopupWindow(View contentView, int width, int height, boolean focusable) {}

Фокус по умолчанию - «ложь»

5 голосов
/ 08 апреля 2011

Потребовалось немного, чтобы понять, но вот, пожалуйста:

При создании всплывающего окна мне пришлось установить текстовое поле (Edittext), чтобы принудительно открывать экранную клавиатуру при получении фокуса.

 txtBox.setOnFocusChangeListener(new OnFocusChangeListener() {

        public void onFocusChange(View v, boolean hasFocus) {
            if (hasFocus == true){
                InputMethodManager inputMgr = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
                inputMgr.toggleSoftInput(InputMethodManager.SHOW_FORCED, 0);
                inputMgr.showSoftInput(v, InputMethodManager.SHOW_IMPLICIT);

            }
        }
    });
    txtBox.requestFocus();
4 голосов
/ 06 марта 2012

Добавить этот код popupWindow.setFocusable (true);

1 голос
/ 01 ноября 2017

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

editText.setOnFocusChangeListener(new View.OnFocusChangeListener() {
        @Override
        public void onFocusChange(final View v, final boolean hasFocus) {
            if (hasFocus && editText.isEnabled() && editText.isFocusable()) {
                editText.post(new Runnable() {
                    @Override
                    public void run() {
                        final InputMethodManager imm =(InputMethodManager)getBaseContext().getSystemService(Context.INPUT_METHOD_SERVICE);
                        imm.showSoftInput(editText,InputMethodManager.SHOW_IMPLICIT);
                    }
                });
            }
        }
    });
...