我有一个关于Android ICS Launcher 4.0.x的奇怪案例。
前提条件:
Android
操作步骤:
进入市场(Play Store),下载"Go任务管理器“并在Launcher上打开
当前结果:
期望值:
我的尝试(修改启动器ICS源码):
android:screenOrientation="portrait"
=>仍然无法修复problem.android:configChanges="orientation|screenSize"
=>仍然无法修复setRequestedScreenOrientation(PORTRAIT)
setRequestedScreenOrientation(PORTRAIT)
=>仍然无法修复问题。我尝试的方法在Android2.x上运行良好;然而,在4.0.3+上,不知何故,它并没有像预期的那样工作。有人知道这是怎么回事吗?
发布于 2012-08-05 11:47:32
问题不在启动程序中。问题是,电话上的所有活动都共享一个配置(包括方向)。
因此,如果你有一个将方向设置为Landspace的活动,例如相机(这是我工作的经典示例),这将使所有其他活动也在景观上,因为正如我所说的,信息在系统中是唯一的,并且在所有人之间共享。
这在Android诞生之初就发生了,尽管有时你不会注意到这一点,因为变化非常快。
要检查我所说的内容,请执行以下操作。编写一个具有对话主题的活动,比如@android:style/Theme.Holo.Dialog
,这样它就不会覆盖整个屏幕,您仍然可以看到下面的活动。该活动必须具有固定的方向。假设您将其设置为景观。然后使用use am start
on Android shell,以便能够在任何其他活动之上启动您刚刚创建的活动。您将看到,无论前一个活动的方向如何,只要您启动测试活动,前一个活动将采用与您的测试活动相同的方向。当您回击时,上一个活动将恢复方向。但有时可能需要一段时间,所以您可以看到当前的结果。
发布于 2012-05-27 14:29:07
股票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);
}
https://stackoverflow.com/questions/10629226
复制相似问题