Сегодня утром у меня возникла проблема при попытке обработать onConfigurationChanged
событие. Проблема в том, что метод, который я отменяю, не вызывается, когда я меняю ориентацию телефона. Мне вообще не звонят.
Я включил android:configChanges="orientation"
действие, определенное в манифесте, как указано в документации по Android, но это не имеет значения.
Вы столкнулись с этой проблемой?
android:configChanges
Это то, что написано в javadoc Google:Note: If your application targets API level 13 or higher (as declared by the minSdkVersion and targetSdkVersion attributes), then you should also declare the "screenSize" configuration, because it also changes when a device switches between portrait and landscape orientations.
Ответы:
Это был мой гремлин для ~ той же проблемы:
(Из http://developer.android.com/guide/topics/resources/runtime-changes.html )
TL; DR: добавьте "| screenSize" в configChanges при ориентации на уровень API 13+
источник
+1
с моей стороны"screenSize"
это было так.Некоторые устройства 4.0 не вызывают onConfigurationChanged. Просто добавьте слушателя в screenSize.
android:configChanges="orientation|screenSize"
источник
onConfigurationChanged
, тестированияConfiguration.ORIENTATION_LANDSCAPE
и включения ТОЛЬКОandroid:configChanges="orientation"
в манифест. СпасибоПроблема заключалась в том, что при использовании этого метода
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
для принудительной ориентации вашего изображения
Activity
в портретный режим вы не являетесь кандидатом на получениеorientation
изменений.Таким образом, решение состоит в том, чтобы не
setRequestOrientation
использовать определенный режим. Но вместо этого используйтеSCREEN_ORIENTATION_SENSOR.
источник
onConfigChanged
, когда пользователь поворачивает свой телефон. То же поведение, что и в приложении YouTube. Это возможно?убедитесь, что на вашем устройстве включен параметр "Поворот экрана"
источник
android:screenOrientation
на уровнеActivity
илиApplication
уровне.android:configChanges="orientation|keyboardHidden"
вместо этого.источник
Я потратил десятки минут, чтобы выяснить, почему не работает. Я добавил,
screenSize
но это все равно не сработало.Оказалось, что я добавил
android:configChanges
к<application>
элементу, а не к<activity>
элементу, как должен был!Конечно, это была моя ошибка, но все мы знаем, что все мы тратим много времени на такую глупую ошибку. Итак, я добавляю этот ответ на случай, если появится еще один глупый программист вроде меня.
источник
Macarse на 100% выигрывает со вторым вариантом.
Пытаться
android:configChanges="orientation|keyboardHidden|screenSize"
У меня была точно такая же проблема, и на эмуляторе 1.6 добавлялись
keyboardHidden
причины,onConfigurationChanged
вызываемые во время вращения. Удалите его, и он перестанет вызываться.источник
У меня была та же проблема -
onConfigurationChanged
не вызывалась, когда устройство меняло ориентацию, несмотря на наличиеandroid:configChanges="orientation|keyboardHidden"
в файле манифеста. Я использовал фрагмент кода, предоставленныйDeva
здесьориентация не работает в 2.3.3?
чтобы проверить
onConfigurationChanged
, звонили ли. Не было.После нескольких часов экспериментов я понял, что в файле манифеста есть следующие строки
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15"/>
и при переходе
android:targetSdkVersion="15"
наandroid:targetSdkVersion="8"
,onConfigurationChanged
начали называть. Итак, часть манифеста, наконец, выглядела так<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8"/>
источник
attribute: screensize
»? Было бы полезно предоставить более подробную информацию.Я только что обнаружил, что если у вас есть:
android:screenOrientation="landscape"
в манифесте onConfigurationChanged () тоже не будет вызываться ...
это может быть похоже на:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
эта установка ориентации блокирует onConfigurationChanged ().
источник
<uses-sdk android:minSdkVersion="8" android:maxSdkVersion="17" />
Не используйте какие-либо целевые версии SDK, чтобы усложнить вам жизнь. и для всех уровней api используйте это как прослушиватель изменений конфигурации
android:configChanges="orientation|keyboardHidden|screenLayout"
источник
Не уверен, что это лучшее место для этого, но столкнувшись с этой проблемой, я заметил кое-что интересное.
Если прослушиватель onConfigurationChanged () НЕ работает, то onCreate () вызывается снова при каждом изменении ориентации.
Если прослушиватель onConfigurationChanged () работает, этот метод вызывается вместо onCreate () при изменении ориентации.
источник
Все решения не работают, но я пытаюсь удалить свою активность темы в файле манифеста Android. Так странно
<activity android:name="MyActivity" android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation" android:theme="@style/MyTheme" --> remove this line /> <style name="MyTheme" parent="Theme.AppCompat.NoActionBar"> <item name="windowNoTitle">true</item> <item name="android:windowIsTranslucent">true</item> </style>
источник
Ни одно из предложений не сработало для меня (я отреагировал на собственный проект этой проблемой), но после нескольких часов отладки я обнаружил, что если у вас есть эта строка в AppTheme файла styles.xml
<item name="android:windowIsTranslucent">true</item>
тогда приложение не будет вращаться.
источник
@ thanhbinh84 Дала мне идею, что может быть причиной этого.
Удаление
<item name="android:windowIsTranslucent">true</item>
из моей темы в styles.xml исправило это!источник
У меня была такая же проблема, и в манифесте были указаны как android: screenOrientation, так и android: configChanges. Когда я удалил первый, onConfigurationChanged () вызывается при ротации. Странно, но работает)
источник
У вас есть
android.content.res.Configuration
операторы импорта? Eclipse может автоматически вставлять импорт, если вы нажметеCtrl+Shift+O
.Если он отсутствует, компилятор не сможет распознать, что вы законно переопределяете метод суперкласса, и выдаст ошибку.
источник