今天早上我在处理 onConfigurationChanged事件时遇到了一个问题。问题是,当我改变手机的方向时,我覆盖的这个方法没有被调用。根本没人打电话来。
onConfigurationChanged
我已经将 android:configChanges="orientation"放在了 android 文档中提到的清单中定义的活动上,但是这没有什么区别。
android:configChanges="orientation"
你想出这个问题了吗?
导入语句中有 android.content.res.Configuration吗? 如果按 Ctrl+Shift+O,Eclipse 可以自动插入导入。
android.content.res.Configuration
Ctrl+Shift+O
如果没有,编译器将无法识别您正在合法地重写超类方法,因此将抛出一个错误。
Activity
Application
android:screenOrientation
android:configChanges="orientation|keyboardHidden"
马卡斯百分之百肯定他的第二个选择。
试试 android:configChanges="orientation|keyboardHidden|screenSize"
android:configChanges="orientation|keyboardHidden|screenSize"
我遇到了完全相同的问题,在1.6的模拟器上加入 keyboardHidden会导致 onConfigurationChanged在旋转期间被调用。删除它,它就不会被调用。
keyboardHidden
问题是,如果使用这种方法
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
为了强制您的 Activity的方向到纵向模式,您不是候选接收 orientation的变化。
orientation
因此,解决方案是不使用 setRequestOrientation到特定的模式,而是使用 SCREEN_ORIENTATION_SENSOR.
setRequestOrientation
SCREEN_ORIENTATION_SENSOR.
我也遇到了同样的问题,并且在清单中指定了“ android: screen 定位”和“ android: configChanges”。当我删除第一个时,onConfigurationChanged ()会在轮转时被调用。很奇怪,但是很有效)
这就是我对同一个问题的疑惑:
注意: 从 Android 3.2(API 级别13)开始,“屏幕大小” 当设备在纵向和横向之间切换时也会发生变化 因此,如果您希望防止由于以下原因而导致的运行时重新启动 在开发 API 级别13或更高的应用程序时,方向会发生变化(如 由 minSdkVersion 和 targetSdkVersion 属性声明) ,则 除了“方向”外,还必须包括“屏幕大小”值 价值。也就是说,你必须申报 配置更改 = “取向 | 屏幕大小” 应用程序的目标 API 级别为12或更低,那么您的活动总是 处理此配置更改本身(此配置更改 不会重新启动你的活动,即使是在安卓3.2或 更高的设备)。
(来自 http://developer.android.com/guide/topics/resources/runtime-changes.html)
DR: 在针对 API 级别13 + 时,添加“ | screen Size”来配置更改
我有同样的问题-onConfigurationChanged没有调用时,设备改变方向 尽管如此有 android:configChanges="orientation|keyboardHidden"在清单文件。我在这里使用了 Deva共享的代码片段
Deva
2.3版本的定位系统无法正常工作。3?
检查 onConfigurationChanged是否被呼叫。它没有。
经过几个小时的实验,我意识到在清单文件中有以下几行
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="15"/>
在将 android:targetSdkVersion="15"改为 android:targetSdkVersion="8"时,onConfigurationChanged开始被调用。所以,部分清单最终看起来是这样的
android:targetSdkVersion="15"
android:targetSdkVersion="8"
<uses-sdk android:minSdkVersion="8" android:targetSdkVersion="8"/>
检查您的设备是否已将“屏幕旋转”设置为打开
有些4.0版本的设备不调用 ConfigurationChanged,只是在 screen Size 中添加一个侦听器。
android:configChanges="orientation|screenSize"
我只是发现,如果你有:
android:screenOrientation="landscape"
在清单中,onConfigurationChanged ()将不会被称为太..。
这可能类似于:
设置方向会阻止 onConfigurationChanged ()。
<uses-sdk android:minSdkVersion="8" android:maxSdkVersion="17" />
不要使用任何 目标 sdk 版本使您变得复杂。对于所有的 api 级别,使用它作为配置更改监听器
android:configChanges="orientation|keyboardHidden|screenLayout"
不知道这是不是最好的地方,但在遇到这个问题-我观察到一些有趣的东西。
如果 < em > onConfigurationChanged () 侦听器无法工作,那么每次方向更改时都会再次调用 onCreate ()。
如果 < em > onConfigurationChanged () 侦听器正在工作,那么在方向更改时将调用该方法而不是 onCreate ()。
我花了几十分钟来找出它为什么不起作用。我添加了 screenSize,但它仍然没有工作。
screenSize
事实证明,我将 android:configChanges添加到了 <application>元素,而不是我应该添加到的 <activity>元素!
android:configChanges
<application>
<activity>
当然,这是我的错,但我们都知道,我们都为这种愚蠢的错误花了很多时间。因此,我添加这个答案,以防有另一个愚蠢的程序员喜欢我。
所有的解决方案不工作,直到我尝试删除我的 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>
@ than hbinh84让我知道了是什么导致了这一切。 移除 <item name="android:windowIsTranslucent">true</item> 从 styles.xml 中的主题修复了它!
<item name="android:windowIsTranslucent">true</item>
这些建议对我来说都不起作用(我曾经对这个问题进行过本地项目的反应) ,但是经过几个小时的调试后,我发现如果您在 styles.xml 的 AppTheme 中有这一行
那么应用程序将不会旋转。
放下
<activity name=".yourActivity" android:configChanges="orientation|screenSize" />
在你的活动清单标签上
然后加上
@Override public void onConfigurationChanged(Configuration newConfig) { //don't reload the current page when the orientation is changed Log.d(TAG, "onConfigurationChanged() Called"); super.onConfigurationChanged(newConfig); }
在 onCofigurationChanged ()中调用 onCreate ()
11年后... 对我来说,是模拟器实例运行 API 28,后来默认“自动旋转”关闭(出于某种原因)。这样可以防止屏幕旋转。
要解决这个问题,你必须打开模拟器设备的控制面板并打开它: