onConfigurationChanged не получает вызов
Сегодня утром у меня возникла проблема с обработкой события onConfigurationChanged
. Проблема в том, что метод, который я переопределяю, не вызывается при изменении ориентации телефона. Не получилось позвонить вообще.
Я установил android:configChanges="orientation"
на активность, определенную в манифесте, как указано в документации по Android, но это не имеет значения.
Вы столкнулись с этой проблемой?
- Конфигурация устройства Android для AOSP
- Как установить идентификатор динамически созданного макета?
- Android Gradle Apache HttpClient не существует?
- Доступ к файлам с карты genymotion sd
- Мгновенный запуск в Android Studio 2.0 (как отключить)
- Как получить правильную ориентацию изображения, выбранного из галереи изображений по умолчанию
- setResult не работает, когда нажата кнопка BACK
- Вам нужно сохранить высокий балл для Android-игры
- ServerTimestamp всегда имеет значение null для Firebase Firestore
- Dynamic ListPreference в android
- Ошибка установки: INSTALL_PARSE_FAILED_MANIFEST_MALFORMED?
- Определите, используется ли приложение Android в первый раз
- Использование контекста приложения во всем мире?
Это был мой гремлин по той же проблеме:
Внимание: Начиная с Android 3.2 (уровень API 13), «размер экрана» также изменяется, когда устройство переключается между портретной и альбомной ориентацией. Таким образом, если вы хотите предотвратить перезапуск во время изменения ориентации при разработке для уровня API 13 или выше (как объявлено атрибутами minSdkVersion и targetSdkVersion), вы должны включить значение «screenSize» в дополнение к значению «ориентация». То есть, вы должны декалировать android: configChanges = “orientation | screenSize”. Однако, если ваше приложение нацелено на уровень API 12 или ниже, ваша деятельность всегда обрабатывает это изменение самой конфигурации (это изменение конфигурации не перезапускает вашу активность даже при работе на устройстве Android 3.2 или выше).
(Из http://developer.android.com/guide/topics/resources/runtime-changes.html )
TL; DR: добавить «| screenSize» в configChanges при настройке уровня API 13+
Проблема заключалась в том, что если вы используете этот метод
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
чтобы заставить ориентацию вашей Activity
в портретном режиме, вы не можете получать изменения orientation
.
Таким образом, решение состоит в том, чтобы не setRequestOrientation
в конкретном режиме. Но вместо этого используйте SCREEN_ORIENTATION_SENSOR.
Некоторые устройства 4.0 не вызывают onConfigurationChanged. Просто добавьте слушателя в screenSize.
android:configChanges="orientation|screenSize"
убедитесь, что на вашем устройстве установлено значение «Разрешение экрана»
- Убедитесь, что вы не используете
android:screenOrientation
вandroid:screenOrientation
или на уровнеApplication
. - Попробуйте использовать
android:configChanges="orientation|keyboardHidden"
вместо этого.
Я потратил десятки минут, чтобы узнать, почему это не сработало. Я добавил screenSize
но он все еще не работает.
Оказалось, что я добавил android:configChanges
к android:configChanges
, а не к элементу
как я должен был бы!
Ну, конечно, это была моя ошибка, но мы все знаем, что все мы тратим много времени на эту глупую ошибку. Итак, я добавляю этот ответ на всякий случай, если должен быть еще один глупый программист, как я.
Macarse 100% на деньги с его вторым вариантом.
Попробуйте android:configChanges="orientation|keyboardHidden|screenSize"
У меня была точно такая же проблема, и на эмуляторе 1.6 добавлена keyboardHidden
onConfigurationChanged
причины onConfigurationChanged
вызывались во время вращения. Удалите его, и он перестает быть вызванным.
У меня была та же проблема: onConfigurationChanged
не вызывался, когда устройство меняло ориентацию, несмотря на наличие android:configChanges="orientation|keyboardHidden"
в файле манифеста. Я использовал отключенный код, разделенный Deva
здесь
ориентация не работает в 2.3.3?
чтобы проверить, onConfigurationChanged
ли onConfigurationChanged
. Не было.
После нескольких часов экспериментов я понял, что у меня есть следующие строки в файле манифеста
и при изменении android:targetSdkVersion="15"
для android:targetSdkVersion="8"
, onConfigurationChanged
начал вызываться. Итак, часть манифеста, наконец, выглядела так
Я только что нашел, что если у вас есть:
android:screenOrientation="landscape"
в манифесте onConfigurationChanged () не будет вызываться …
это может быть похоже на:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
что установка ориентации блокирует onConfigurationChanged ().
Не используйте любые целевые версии sdk, чтобы усложнить ситуацию. и для всех уровней api это используется как прослушиватель изменений конфигурации
android:configChanges="orientation|keyboardHidden|screenLayout"
Не уверен, что это лучшее место для него, но, столкнувшись с этой проблемой, я заметил что-то интересное.
Если слушатель onConfigurationChanged () НЕ работает, то onCreate () вызывается снова каждый раз при изменении ориентации.
Если работает onConfigurationChanged () , то этот метод вызывается вместо onCreate () при изменении ориентации.
Все решения не работают. Я пытаюсь удалить свою тему в файле манифеста Android. Так странно
Размер
remove this line />
remove this line />
@ thanhbinh84 Дала мне идею, что может быть причиной этого.
Удаление
из моей темы в styles.xml исправлено!
Ни один из предложений не работал для меня (я ответил на собственный проект с этой проблемой), но после нескольких часов отладки я обнаружил, что если у вас есть эта строка в AppTheme styles.xml
- true
то приложение не будет вращаться.
У меня была такая же проблема, и у меня были оба «андроида: screenOrientation» и «android: configChanges», указанные в манифесте. Когда я удаляю первый, onConfigurationChanged () вызывается при вращении. Странно, но это woks)
У вас есть android.content.res.Configuration
в ваших операторах импорта? Eclipse может автоматически вставлять импорт, если вы нажмете Ctrl+Shift+O
Если этого не хватает, компилятор не сможет распознать, что вы законно переопределяете метод суперclassа и, таким образом, выкинете ошибку.