Android ICS Launcher 4.0.x 無法保持屏幕方向



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

前提条件:

  • 具有根权限的 ICS 设备

  • 下载安卓ICS启动器4.0.3/4源代码(修改和运行(

程序:

  1. 进入市场(Play商店(,下载"Go任务管理器">

  2. 打开启动器上的小部件选项卡,找到"内存优化",拖动到主屏幕(工作区(

  3. 下载并安装"水果忍者">

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

  5. 执行"水果忍者"并将手机保持在横向状态(在此位置将其握在手中,不要更改此位置(

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

  7. 现在回到启动器主屏幕,触摸"内存优化"小部件

当前结果:

  • 在步骤 7 之后,屏幕旋转到横向一段时间,然后返回纵向。

期望:

  • 在步骤 7 之后,屏幕应保持为纵向。

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

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

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

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

我尝试过的东西适用于Android 2.x; 但是,从4.0.3 +开始,不知何故它没有按预期工作。有人对此有任何想法吗?

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

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

这种情况自Android开始以来就发生了,尽管有时您不会注意到这一点,因为更改非常快。

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

库存 ICS 启动器有几个地方会将方向设置为未指定。只需搜索启动器.java以获取setRequestedOrientation,但具体来说,它要么在"eng"版本或平板电脑上。它在创建中执行此操作,但也在从应用程序拖放自定义后执行此操作。

从启动器.java开始创建:

// 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);
}

最新更新