Android: Обнаружьте открытый softkeyboard

(\ d +) попробуйте это! Я тестировал этот инструмент с помощью x12345 http://www.regular-expressions.info/javascriptexample.html

25
задан Noah Seidman 20 June 2010 в 23:15
поделиться

4 ответа

По этому сообщению и этому сообщению на android-developers не похоже, что возможно сделать то, что вы хотите. Возможно, вам стоит пересмотреть сценарий использования того, что вы делаете. Возможно, вам подойдет один из флагов softInputMode .

25
ответ дан 28 November 2019 в 17:56
поделиться

Вот мое решение:

1 / Простой интерфейс

public interface KeyboardVisibilityListener {
    void onKeyboardVisibilityChanged(boolean keyboardVisible);
}

2 / Вспомогательный метод (поместите его в нужное место, например, в класс с именем KeyboardUtil)

public static void setKeyboardVisibilityListener(Activity activity, KeyboardVisibilityListener keyboardVisibilityListener) {
    View contentView = activity.findViewById(android.R.id.content);
    contentView.getViewTreeObserver().addOnGlobalLayoutListener(new OnGlobalLayoutListener() {
        private int mPreviousHeight;

        @Override
        public void onGlobalLayout() {
            int newHeight = contentView.getHeight();
            if (mPreviousHeight != 0) {
                if (mPreviousHeight > newHeight) {
                    // Height decreased: keyboard was shown
                    keyboardVisibilityListener.onKeyboardVisibilityChanged(true);
                } else if (mPreviousHeight < newHeight) {
                    // Height increased: keyboard was hidden
                    keyboardVisibilityListener.onKeyboardVisibilityChanged(false);
                } else {
                    // No change
                }
            }
            mPreviousHeight = newHeight;
        }
    });
}

3 / Используйте это упражнение таким образом (хорошее место в onCreate):

KeyboardUtil.setKeyboardVisibilityListener(this, mKeyboardVisibilityListener);
43
ответ дан BoD 28 November 2019 в 17:56
поделиться

Единственный способ, которым я смог обойти это, это установить андроид моей активности: windowSoftInputMode = "AdjustResize", а затем внедрить пользовательский «вид детектора» в макет для обработки изменения размера контейнера и распространить его как пользовательское событие. (через прослушиватель) для включения / выключения программной клавиатуры.

В следующем посте описан подход к его реализации: EditText не вызывает изменения при нажатии кнопки назад

2
ответ дан Community 28 November 2019 в 17:56
поделиться

@ Ответ совета директоров работает нормально, если я уберу следующую строку.

if (mPreviousHeight != 0) {
     /* other code is same, because
        mPreviousHeight is 0 when it comes first */
}
0
ответ дан Nathan Tuggy 28 November 2019 в 17:56
поделиться
Другие вопросы по тегам:

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