17

我有一个关于 Android ICS Launcher 4.0.x 的奇怪案例。

前提:

  • 具有root权限的ICS设备

  • 下载Android ICS Launcher 4.0.3/4源码(修改运行)

程序:

  1. 前往市场(Play 商店),下载“Go 任务管理器”

  2. 在 Launcher 上打开 Widgets 选项卡,找到“Mem Optimize”,拖动到主屏幕(工作区)

  3. 下载并安装“水果忍者”

  4. 在主屏幕上的“内存优化”小部件旁边创建“水果忍者”快捷方式。

  5. 执行“水果忍者”,将手机保持在横向(这个位置握在手中,不要改变这个)

  6. 在“水果忍者”的菜单屏幕上,将“退出”切片,选择“是”

  7. 现在回到 Launcher 主屏幕,点击“Mem Optimize”小部件

当前结果:

  • 在第 7 步之后,屏幕会旋转到 LANDSCAPE 片刻,然后返回 PORTRAIT。

期待:

  • 在第 7 步之后,屏幕应保持为 PORTRAIT。

我的尝试(修改 Launcher ICS 源代码):

  • 添加到“Manifest.xml”:android:screenOrientation="portrait"=> 仍然无法解决问题。

  • 处理配置更改,android:configChanges="orientation|screenSize"=> 仍然无法解决问题。

  • 使用:setRequestedScreenOrientation(PORTRAIT)=> 仍然无法解决问题。

我在 Android 2.x 上尝试过的工作;但是,从 4.0.3+ 开始,它并没有按预期工作。有人对此有任何想法吗?

4

2 回答 2

1

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

因此,如果您有一个将方向设置为 Landspace 的活动,例如相机(这是我工作的经典示例),这将“使”所有其他活动也位于景观上,因为正如我所说,信息在系统中是唯一的并在所有人之间共享。

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

要检查我在说什么,请执行以下操作。编写一个带有对话框主题的活动,例如 @android:style/Theme.Holo.Dialog,这样它就不会覆盖整个屏幕,您仍然可以看到下面的活动。该活动必须具有固定的方向。假设您将其设置为横向。然后在 Android shell上使用 am start ,以便能够在任何其他活动之上启动您刚刚创建的活动。您会看到,无论之前的活动有什么方向,只要您启动测试活动,之前的活动将采用与您的测试活动相同的方向。当您回击时,先前的活动将恢复方向。但有时可能需要一段时间,因此您会看到当前结果等内容。

于 2012-08-05T03:47:31.813 回答
0

库存 ICS 启动器有几个地方会将方向设置为未指定。只需在 Launcher.java 中搜索setRequestedOrientation,但具体而言,它位于“eng”版本或平板电脑上。它在 onCreate 中执行,但在从应用程序自定义中拖放之后也执行此操作。

从 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);
}
于 2012-05-27T06:29:07.297 回答