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.

检查您的设备是否有“屏幕旋转”设置为开

“屏幕旋转”设置

  1. 检查您是否在ActivityApplication级别中使用android:screenOrientation
  2. 尝试使用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,编译器将无法识别出你正在覆盖超类的方法,所以会抛出一个错误。