Подтвердить что ты не робот

OnConfigurationChanged() не стрелять для клавиатурыHidden

Я следил за различными вопросами и ответами здесь, чтобы настроить активность Android для переопределения onConfigurationChanged(), чтобы выполнить логику, когда открывается и закрывается мягкая клавиатура. Вот соответствующие выдержки из моего кода. Я отбросил его до самого простого сценария:

AndroidManifest.xml

...
<activity 
    android:name=".SearchActivity" 
    android:label="@string/app_name" 
    android:configChanges="keyboard|keyboardHidden|orientation"
/>
...

SearchActivity.java

...
@Override
public void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged(newConfig);
    Toast.makeText(this, "onConfigurationChanged()", Toast.LENGTH_SHORT).show();
}
...

В приведенном выше коде будет отображаться "Toast", когда я меняю ориентацию, но ничего не делает, когда мягкая клавиатура открывается или закрывается. Я протестировал открытие мягкой клавиатуры с помощью фокусировки EditText и ручным открытием ее с помощью длительного нажатия кнопки меню. Не запускайте вызов onConfigurationChanged().

Таким образом, код на месте, похоже, работает, поскольку меняется ориентация, но я ничего не получаю для мягкой клавиатуры. Есть идеи? Если ответ "onConfigurationChanged() не поймает события софт-клавиатурой", что является подходящим решением для обнаружения и обработки этого события?

На всякий случай это актуально, я тестирую Droid X, работающий с пряниками.

4b9b3361

Ответ 1

Нет, onConfigurationChange() не распознает события софт-клавиатурой: это не изменение конфигурации. Изменение ориентации приводит к использованию нового набора ресурсов (например, layout-land vs layout-port), который является определением изменения конфигурации.

Итак, как это сделать? Ну, там, где клавиатура показывается, события не срабатывают, но вы можете обнаружить, когда клавиатура вызывает настройку вашего макета.

Смотрите Как проверить видимость программной клавиатуры в Android? для кода.