Android ICS Launcher 4.0.x无法保持屏幕方向是怎么回事?

内容来源于 Stack Overflow,并遵循CC BY-SA 3.0许可协议进行翻译与使用

  • 回答 (2)
  • 关注 (0)
  • 查看 (17)

Android ICS Launcher 4.0.x有一个奇怪的例子。

前提:

  • 具有root权限的ICS设备
  • 下载Android ICS Launcher 4.0.3 / 4源代码(修改并运行)

程序:

  1. 上市(Play Store),下载“前往任务管理器”
  2. 在Launcher上打开Widgets选项卡,找到“Mem Optimize”,拖动到主屏幕(工作区)
  3. 下载并安装“水果忍者”
  4. 在主屏幕上的“Mem Optimize”小部件旁边创建“Fruit Ninja”快捷方式。
  5. 执行“水果忍者”并将手机置于风景中(握住手中的这个位置,不要改变它)
  6. 在“水果忍者”菜单画面上,切片“退出”,选择“是”
  7. 现在返回到启动器主屏幕,触摸“Mem Optimize”小部件

当前结果:

  • 在步骤7之后,屏幕旋转到LANDSCAPE一段时间并返回到PORTRAIT。

期望:

  • 在步骤7之后,屏幕应保存在PORTRAIT中。

我的尝试(修改启动器ICS源代码):

  • 添加到“Manifest.xml”:android:screenOrientation="portrait"=>仍然无法解决问题。
  • 处理配置更改,android:configChanges="orientation|screenSize"=>仍然无法解决问题。
  • 使用:setRequestedScreenOrientation(PORTRAIT)=>仍然无法解决问题。
提问于
用户回答回答于

stockICS发射器有几个地方,它将设置方向未指定。只需搜索Launcher.java setRequestedOrientation,但具体而言,它可能是“eng”版本或平板电脑。它可以在onCreate中完成,也可以在从appscustomize拖放之后完成。

从Launcher.java的onCreate:

// On large interfaces, we want the screen to auto-rotate based on the current orientation
if (LauncherApplication.isScreenLarge() || Build.TYPE.contentEquals("eng")) {
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
}
用户回答回答于

问题不在启动器中。问题是单个配置(包括方向)在手机上的所有活动之间共享。

因此,如果你有一个活动为Landspace设定了方向,例如Camera(这是我工作的经典例子),那么这将使所有其他活动“成为”景观,因为正如我所说的那样,信息在系统中是独一无二的并在所有人中共享。

这发生自从Android的开始,尽管有时你不会注意到,因为这些变化非常快。

扫码关注云+社区