今天早上我想出了一个试图处理onConfigurationChanged
事件的问题。问题是当我改变手机的方向时,我覆盖的方法没有被调用。根本没有被召唤。
我已将android:configChanges="orientation"
放在清单中定义的活动上,如android文档中所述,但这没有什么区别。
你有没有想出这个问题?
答案 0 :(得分:241)
对于同样的问题,这是我的问题:
警告:从Android 3.2(API级别13)开始,“屏幕大小” 当设备在纵向和横向之间切换时也会发生变化 取向。因此,如果您希望阻止运行时重新启动 开发API级别13或更高级别时的方向更改(如 由minSdkVersion和targetSdkVersion属性声明),你 除“方向”外,还必须包含“screenSize”值 值。也就是说,你必须decalare 机器人:configChanges = “方向|屏幕尺寸”。但是,如果你的 应用程序目标API级别12或更低,然后您的活动始终 处理此配置更改本身(此配置更改 即使在Android 3.2或Android上运行,也不会重新启动您的活动 更高的设备)。
(来自http://developer.android.com/guide/topics/resources/runtime-changes.html)
TL; DR:在定位API级别13时,将“| screenSize”添加到configChanges
答案 1 :(得分:35)
问题是如果你使用这种方法
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
要强制Activity
到纵向模式的方向,您不能接受orientation
次更改。
因此,解决方案是不setRequestOrientation
到特定模式。但请改用SCREEN_ORIENTATION_SENSOR.
答案 2 :(得分:34)
4.0的某些设备不会调用onConfigurationChanged。只需向screenSize添加一个监听器。
android:configChanges="orientation|screenSize"
答案 3 :(得分:26)
检查您的设备是否已将“屏幕旋转”设置为
答案 4 :(得分:18)
android:screenOrientation
或Activity
级别中使用Application
。android:configChanges="orientation|keyboardHidden"
。答案 5 :(得分:17)
我花了几十分钟才发现它为什么不起作用。我添加了c
,但它仍然无效。
原来,我已将screenSize
添加到android:configChanges
元素,而不是<application>
元素,因为我应该拥有!
当然,这是我的错误,但我们都知道我们所有人都花了很多时间来处理这种愚蠢的错误。所以,我正在添加这个答案,以防万一像我这样的傻程序员。
答案 6 :(得分:14)
Macarse凭借他的第二选择获得100%的奖金。
尝试android:configChanges="orientation|keyboardHidden|screenSize"
我有完全相同的问题,并且在1.6模拟器上添加keyboardHidden
导致在轮换期间调用onConfigurationChanged
。删除它,它停止被调用。
答案 7 :(得分:5)
我遇到了同样的问题 - 尽管在清单文件中有onConfigurationChanged
,但设备更改了方向时未调用android:configChanges="orientation|keyboardHidden"
。我使用了Deva
在此处共享的剪切代码
orientation is not working in 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"/>
答案 8 :(得分:3)
我刚发现如果你有:
android:screenOrientation="landscape"
清单中的,onConfigurationChanged()也不会被调用...
这可能类似于:
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
设置方向会阻止onConfigurationChanged()。
答案 9 :(得分:3)
<uses-sdk android:minSdkVersion="8" android:maxSdkVersion="17" />
不要使用任何目标sdk版本来使您复杂化。并且对于所有api级别,将其用作配置更改侦听器
android:configChanges="orientation|keyboardHidden|screenLayout"
答案 10 :(得分:3)
不确定这是最适合它的地方,但在遇到这个问题时 - 我发现了一些有趣的事情。
如果 onConfigurationChanged() 侦听器不起作用,则每次更改方向时都会再次调用onCreate()。
如果 onConfigurationChanged() 侦听器正在运行,则在方向更改时调用该方法而不是onCreate()。
答案 11 :(得分:1)
所有解决方案都不起作用我尝试删除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>
答案 12 :(得分:1)
@ thanhbinh84让我知道可能导致这种情况的原因。
删除
<item name="android:windowIsTranslucent">true</item>
从我在styles.xml中的主题修复它!
答案 13 :(得分:1)
这些建议都没有对我有用(我已经对本期项目做了反应),但是经过几个小时的调试后我发现如果你在styles.xml的AppTheme中有这一行
<item name="android:windowIsTranslucent">true</item>
然后应用程序将不会旋转。
答案 14 :(得分:0)
我有同样的问题,我在清单中指定了“android:screenOrientation”和“android:configChanges”。当我删除第一个时,onConfigurationChanged()会在旋转时调用。很奇怪,但它开始了)
答案 15 :(得分:-2)
您的导入声明中是否有android.content.res.Configuration
?如果按Ctrl+Shift+O
,Eclipse可以自动插入导入。
如果缺少,编译器将无法识别您是否合法地覆盖了超类方法,因此会抛出错误。