2012-05-17 35 views
17

我对Android ICS Launcher 4.0.x有个奇怪的例子。Android ICS Launcher 4.0.x无法保持屏幕方向

前置条件:

  • 与根权限的ICS设备

  • 下载Android ICS启动4.0.3/4的源代码(修改和运行)

程序:

  1. 走向市场(Play商店下载),下载“进入任务管理器”

  2. 上启动
  3. 打开窗口小部件选项卡,找到“纪念品优化”,拖动到主屏幕(工作区)

  4. 下载并安装“水果忍者“

  5. 在主屏幕上的”Mem Optimize“小部件旁边创建”Fruit Ninja“快捷方式。

  6. 执行“水果忍者”,并保持您的手机在横向(保持在这个位置你的手,不改变这一点)

  7. 论“水果忍者”菜单画面,切片“退出” ,选择 “是”

  8. 现在回到启动主屏幕上,触摸 “MEM优化” 窗口小部件

当前结果:

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

期望:

  • 步骤7后,屏幕应保持在肖像。

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

  • 添加到 “的Manifest.xml”:android:screenOrientation="portrait" =>仍然不能修复该问题。

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

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

我试过在Android 2.x上工作过的东西;然而,从4.0.3+开始,它无法按预期工作。有没有人对此有任何想法?

+4

我们可以有这个缺陷的视频演示吗? – Ronnie

+0

在manifest中你添加了android:screenOrientation?你可以复制该片段吗? – Warpzit

回答

0

股票ICS发射器有一些地方,它将设置方向未指定。只需搜索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); 
} 
+0

嗨凯文,好久不见!确实,代码中的某个地方已经确定了方向,但事实上,我已经删除了这些代码,或者设置了朝向“PORTRAIT”,但它仍然不起作用。我仍然在深入研究框架以找到其原因GB 2.x但不在ICS 4.x中 –

1

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

因此,如果您有一项活动将方向设置为Landspace,例如,照相机(这是我工作的典型例子),这将使所有其他活动“成为”景观,因为正如我所说,信息在系统中是独一无二的,并在所有人中共享。

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

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