没有被调用

今天早上我在处理 onConfigurationChanged事件时遇到了一个问题。问题是,当我改变手机的方向时,我覆盖的这个方法没有被调用。根本没人打电话来。

我已经将 android:configChanges="orientation"放在了 android 文档中提到的清单中定义的活动上,但是这没有什么区别。

你想出这个问题了吗?

80158 次浏览

导入语句中有 android.content.res.Configuration吗? 如果按 Ctrl+Shift+O,Eclipse 可以自动插入导入。

如果没有,编译器将无法识别您正在合法地重写超类方法,因此将抛出一个错误。

  1. 检查您没有在 ActivityApplication级别中使用 android:screenOrientation
  2. 尝试使用 android:configChanges="orientation|keyboardHidden"代替。

马卡斯百分之百肯定他的第二个选择。

试试 android:configChanges="orientation|keyboardHidden|screenSize"

我遇到了完全相同的问题,在1.6的模拟器上加入 keyboardHidden会导致 onConfigurationChanged在旋转期间被调用。删除它,它就不会被调用。

问题是,如果使用这种方法

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

为了强制您的 Activity的方向到纵向模式,您不是候选接收 orientation的变化。

因此,解决方案是不使用 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共享的代码片段

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"/>

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

"Screen rotation" setting

有些4.0版本的设备不调用 ConfigurationChanged,只是在 screen Size 中添加一个侦听器。

android:configChanges="orientation|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"

不知道这是不是最好的地方,但在遇到这个问题-我观察到一些有趣的东西。

如果 < em > onConfigurationChanged () 侦听器无法工作,那么每次方向更改时都会再次调用 onCreate ()。

如果 < em > onConfigurationChanged () 侦听器正在工作,那么在方向更改时将调用该方法而不是 onCreate ()。

我花了几十分钟来找出它为什么不起作用。我添加了 screenSize,但它仍然没有工作。

事实证明,我将 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 中的主题修复了它!

这些建议对我来说都不起作用(我曾经对这个问题进行过本地项目的反应) ,但是经过几个小时的调试后,我发现如果您在 styles.xml 的 AppTheme 中有这一行

<item name="android:windowIsTranslucent">true</item>

那么应用程序将不会旋转。

放下

<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,后来默认“自动旋转”关闭(出于某种原因)。这样可以防止屏幕旋转。

要解决这个问题,你必须打开模拟器设备的控制面板并打开它:enter image description here