onConfigurationChanged没有被调用
今天早上我想出了一个问题,试图处理onConfigurationChanged
事件。 问题是当我改变手机的方向时,我重写的方法没有被调用。 根本没有被打电话。
我已经把android:configChanges="orientation"
放在android文档中提到的清单中定义的活动上,但这并没有什么区别。
你有没有想出这个问题?
这是我同样的问题:
注意:从Android 3.2(API级别13)开始,当设备在纵向和横向之间切换时,“屏幕大小”也会改变。 因此,如果要在API级别13或更高级别(由minSdkVersion和targetSdkVersion属性声明)开发时防止因方向更改而导致运行时重新启动,则除了“方向”值之外,还必须包含“screenSize”值。 也就是说,你必须decalare android:configChanges =“orientation | screenSize”。 但是,如果您的应用程序的目标级别为12或更低,那么您的活动始终会自行处理此configuration更改(即使在Android 3.2或更高版本的设备上运行,此configuration更改也不会重新启动您的活动)。
(来自http://developer.android.com/guide/topics/resources/runtime-changes.html )
TL; DR:在定位API级别13+时,将“| screenSize”添加到configChanges
4.0的某些设备不会调用onConfigurationChanged。 只要添加一个侦听器screenSize了。
android:configChanges="orientation|screenSize"
问题是,如果你使用这种方法
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
要强制您的Activity
方向为纵向模式,您不适合接收orientation
更改。
所以解决scheme是不setRequestOrientation
到一个特定的模式。 但是改为使用SCREEN_ORIENTATION_SENSOR.
检查您的设备是否有“屏幕旋转”设置为开
- 检查您是否在
Activity
或Application
级别中使用android:screenOrientation
。 - 尝试使用
android:configChanges="orientation|keyboardHidden"
来代替。
用他的第二个选项,Macarse是100%的钱。
尝试android:configChanges="orientation|keyboardHidden|screenSize"
我有完全相同的问题,并在1.6模拟器添加keyboardHidden
导致onConfigurationChanged
被称为在旋转期间。 删除它,它停止被称为。
我花了几十分钟来找出为什么它不起作用。 我添加了screenSize
但它仍然没有工作。
事实certificate,我已经将android:configChanges
添加到<application>
元素,而不是我应该拥有的<activity>
元素!
那当然,这是我的错误,但是我们都知道,我们所有人都花了很多时间来处理这种愚蠢的错误。 所以,我添加了这个答案,以防万一有像我这样的另一个愚蠢的程序员。
我有同样的问题 – 尽pipe在清单文件中有android:configChanges="orientation|keyboardHidden"
, 但设备改变方向时onConfigurationChanged
没有被调用。 我在这里使用了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"/>
<uses-sdk android:minSdkVersion="8" android:maxSdkVersion="17" />
不要使用任何目标sdk版本 ,使你复杂化。 并为所有api级别使用此configuration更改侦听器
android:configChanges="orientation|keyboardHidden|screenLayout"
不知道这是最好的地方,但遇到这个问题 – 我观察到一些有趣的事情。
如果onConfigurationChanged()侦听器不工作,则每次更改方向时都会再次调用onCreate()。
如果onConfigurationChanged()侦听器正在工作,则在方向更改时调用该方法,而不是onCreate()。
我刚刚发现,如果你有:
android:screenOrientation="landscape"
在清单中,onConfigurationChanged()不会被调用太…
这可能类似于:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
设置方向阻止onConfigurationChanged()。
所有的解决scheme不工作util我尝试删除我的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>
我有同样的问题,我有清单中指定的“android:screenOrientation”和“android:configChanges”。 当我删除第一个,onConfigurationChanged()被调用旋转。 奇怪,但它炒锅)
@ thanhbinh84给了我一个想法是什么可能造成这一点。
从我的主题在styles.xml中删除<item name="android:windowIsTranslucent">true</item>
修复它!
你有导入语句中的android.content.res.Configuration
? 如果按Ctrl+Shift+O
Eclipse可以自动插入导入。
如果缺less,编译器将无法识别出你正在覆盖超类的方法,所以会抛出一个错误。