Отримання повідомлень, коли віртуальна клавіатура відображається/відхиляється для EditText?

Я хотів би отримувати сповіщення, коли віртуальна клавіатура відображається/відхиляється. Це не здається можливим, за винятком використання певних трюків для перегляду розмірів

Як перевірити видимість програмної клавіатури в Android?

Моя активність має єдиний EditText. Я міг би зробити це не фокусом на запуску активності, а потім додати до нього налаштування фокусу. Коли він набуває фокус, я можу робити мої речі onVirtualKeyboardShown (). Якби я міг просто послухати натискання зворотної клавіші в EditText, я міг би інтерпретувати це як приховану віртуальну клавіатуру. Щось на зразок:

EditText et = ...;
et.setOnFocusChangedListener(new OnFocusChangedListener() {
    public void onFocusChanged(boolean focused) {
        if (focused) {
          //virtual keyboard probably showing.
        }
    }
});
et.setKeyListener(new KeyListener() {
    public void onKeyPressed(int code) {
        if (code == BACK_KEY) [ 
            if (et.isFocused()) {
               //virtual keyboard probably hiding.
               //lose focus to set up for next time.
                et.setFocused(false);
            }
        }
    }
});

Схоже, що будь-який підхід загрожує проблемами, враховуючи всі відмінності між віртуальними клавіатурами, тоді ми також маємо справу з фізичними клавіатурами,

Дякую

1
Ні, я хочу отримати сповіщення, щоб я міг показувати стрічку своїх пропозицій над віртуальною клавіатурою. Коли віртуальну клавіатуру відхиляють, я хотів би приховати свою стрічку. (це лише горизонтальний перегляд зі списком)
додано Автор user291701, джерело
Так, автозаповнення було б краще, але це не має сенсу для цього контексту. Я показую EditText і хочу показати запропоновані твіттер-ручки, коли користувач набирає текст. Було б непогано показувати пропозиції лише тоді, коли користувач фактично відкрив віртуальну клавіатуру. Я знаю, що це не працює у всіх випадках, як дроїд-про має фізичну клавіатуру, яка завжди "відкрита", я думаю. Argh, android.
додано Автор user291701, джерело
Чому потрібно отримувати сповіщення, коли віртуальна клавіатура відображається/відхиляється? Ви намагаєтеся замінити клавіатуру своєю віртуальною клавіатурою?
додано Автор Eric Brynsvold, джерело
Я не знаю, як це зробити - вам краще використовувати автозаповнення для редагування текстів, якщо ви хочете надати пропозиції - принаймні за цей пост , особливо якщо ви хочете, щоб пропозиції з'являлися, коли ви робота з фізичними клавіатурами ... або ви показуєте лише пропозиції, коли текст редагування має фокус і приховує їх, коли він втрачає фокус.
додано Автор Eric Brynsvold, джерело

2 Відповіді

Це не представляється можливим, за винятком використання певного макета змінення розмірів слухачів

Правильно.

Я хочу отримувати сповіщення, щоб над віртуальною клавіатурою могла показувати стрічку своїх пропозицій.

Не всі пристрої Android використовують віртуальні клавіатури. Деякі з них мають фізичні клавіатури. Оскільки вам потрібно підтримувати обидва типи пристроїв, потрібно створити дизайн інтерфейсу користувача, який не передбачає, що у кожного є віртуальна клавіатура.

2
додано
   //Catch the keyboard height
    final LinearLayout masterView = (LinearLayout) findViewById(R.id.conversation_prent);
    masterView.getViewTreeObserver().addOnGlobalLayoutListener(
            new ViewTreeObserver.OnGlobalLayoutListener() {
                public void onGlobalLayout() {
                    Rect r = new Rect();
                    masterView.getWindowVisibleDisplayFrame(r);

                    int result = 0;
                    int resourceId = getResources().getIdentifier(
                            "status_bar_height", "dimen", "android");
                    if (resourceId > 0) {
                        result = getResources().getDimensionPixelSize(
                                resourceId);
                    }

                    int heightDiff = masterView.getRootView().getHeight()
                            - masterView.getHeight();

                    heightDiff = heightDiff - (ab.getHeight() + result);

                    Log.e("Keyboard Size", "Size: " + heightDiff);

                    if (heightDiff > 200) {
                       //The keyboard is shown
                    } else {
                       //The keyboard is hidden
                    }
                }
            });

if your app is running on android < 3 (HoneyComb) delete the parts of the code that are related to the actionbar.

1
додано
android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.