我有一个奇怪的Android ICS Launcher 4.0.x案例。
前提条件:
-
具有根权限的 ICS 设备
-
下载安卓ICS启动器4.0.3/4源代码(修改和运行(
程序:
-
进入市场(Play商店(,下载"Go任务管理器">
-
打开启动器上的小部件选项卡,找到"内存优化",拖动到主屏幕(工作区(
-
下载并安装"水果忍者">
-
在主屏幕上的"内存优化"小部件旁边创建"水果忍者"快捷方式。
-
执行"水果忍者"并将手机保持在横向状态(在此位置将其握在手中,不要更改此位置(
-
在"水果忍者"的菜单屏幕上,切片"退出",选择"是">
-
现在回到启动器主屏幕,触摸"内存优化"小部件
当前结果:
- 在步骤 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);
}