onConfigurationChanged没有被调用

lbl*_*asa 137 android

今天早上我想出了一个试图处理这个onConfigurationChanged事件的问题.问题是当我改变手机的方向时,我覆盖的方法没有被调用.根本没有被召唤.

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

你有没有想出这个问题?

nmr*_*nmr 248

对于同样的问题,这是我的问题:

注意:从Android 3.2(API级别13)开始,当设备在纵向和横向之间切换时,"屏幕大小"也会更改.因此,如果要在开发API级别13或更高级别(由minSdkVersion和targetSdkVersion属性声明)时由于方向更改而阻止运行时重新启动,则除了"orientation"值之外,还必须包含"screenSize"值.也就是说,你必须decalare android:configChanges ="orientation | screenSize".但是,如果您的应用程序的目标是API级别12或更低,那么您的活动始终会自行处理此配置更改(即使在Android 3.2或更高版本的设备上运行,此配置更改也不会重新启动您的活动).

(来自http://developer.android.com/guide/topics/resources/runtime-changes.html)

TL; DR:在定位API级别13+时,将config |添加"| screenSize"添加到configChanges

  • 哇,只有一个属性要添加,该死的就是所有,`+ 1`来自我的身边`"screenSize"`它是. (9认同)

lbl*_*asa 37

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

setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);
Run Code Online (Sandbox Code Playgroud)

要强制您Activity的纵向模式的方向,您不是候选人接收orientation更改.

因此解决方案是不要setRequestOrientation采用特定模式.而是使用SCREEN_ORIENTATION_SENSOR.

  • 是的,这有效,但如果我不想让我的应用程序旋转怎么办?我希望它保持横向模式. (5认同)
  • 我既要使用该功能(当用户在视频播放器上单击“全屏”时),又要在用户旋转手机时继续接收“ onConfigChanged”。与youtube应用中的行为相同。这可能吗? (3认同)

Cor*_*lla 36

4.0的某些设备不会调用onConfigurationChanged.只需向screenSize添加一个监听器.

android:configChanges="orientation|screenSize"
Run Code Online (Sandbox Code Playgroud)


Dmi*_*ich 28

检查您的设备是否已启用"屏幕旋转"设置

  • 我有这个有趣的问题......:D (7认同)
  • 英石!!!花了 4-5 个小时尝试让我的代码运行!正如我从另一个答案中了解到的,覆盖此问题的一种方法是在清单中包含 <android:orientation="sensor"> (4认同)

Mac*_*rse 19

  1. 检查你使用的不是android:screenOrientation在一个Activity或一个Application水平.
  2. 请尝试使用android:configChanges="orientation|keyboardHidden".


Dam*_*les 17

我花了几十分钟才发现它为什么不起作用.我补充说screenSize但它仍然没有用.

事实证明,我已添加android:configChanges<application>元素,而不是<activity>我应该拥有的元素!

嗯,当然,这是我的错误,但我们都知道,我们所有人都花了很多时间来处理这种愚蠢的错误.所以,我正在添加这个答案,万一应该有像我这样的另一个愚蠢的程序员.


Wil*_*iam 14

Macarse凭借他的第二选择获得100%的奖金.

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

我有完全相同的问题,并在1.6模拟器上添加keyboardHidden原因onConfigurationChanged在旋转期间调用.删除它,它停止被调用.


aLe*_*ner 5

我有同样的问题 - 尽管已经在清单文件中,但是onConfigurationChanged当设备改变方向时没有调用.我使用了这里共享的剪切代码android:configChanges="orientation|keyboardHidden"Deva

方向在2.3.3中不起作用?

检查是否onConfigurationChanged被调用.它不是.

经过几个小时的实验,我意识到我在清单文件中有以下几行

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="15"/>
Run Code Online (Sandbox Code Playgroud)

并且在改变android:targetSdkVersion="15"android:targetSdkVersion="8",onConfigurationChanged开始被召唤.因此,清单的一部分最终看起来像这样

<uses-sdk
    android:minSdkVersion="8"
    android:targetSdkVersion="8"/>
Run Code Online (Sandbox Code Playgroud)

  • 您遇到的问题是缺少属性:screensize.请更新你的答案.对于初学者和开发者来说,这将是一个误导性的"修复" (9认同)

Gen*_* Bo 5

不确定这是最好的地方,但在遇到这个问题时 - 我观察到一些有趣的事情。

如果onConfigurationChanged()侦听器不起作用,则每次更改方向时都会再次调用 onCreate()。

如果onConfigurationChanged()侦听器正在工作,则在方向更改时调用该方法而不是 onCreate()。