Android:在onCreate之前设置活动方向,但不在清单中(HDMI插入问题)

4

我可以通过在onCreate中使用setRequestedOrientation来完美地管理方向更改程序。但是,当我插入HDMI电缆后,一切都变得不太好。平板电脑“想要”处于横向模式。因此,当我打开一个活动时,它首先显示为“横向”,然后立即显示为“纵向”,因为我在onCreate中调用了setRequestedOrientation(variable_with_orientation_desired_by_the_user),其中variable=ActivityInfo.SCREEN_ORIENTATION_PORTRAIT。正如您所看到的,我的应用程序在用户打开每个活动时都会旋转;

如果我在清单中设置活动的方向,这个问题部分解决了,因为清单中的方向与用户选择的方向相同。如果它们不同,同样的行为会再次开始。

我尝试过这个,但没有成功:

@Override
public void onCreate(final Bundle saved)
{
    setRequestedOrientation(ScreenOrientation);
    super.onCreate(icicle);
}

所以,有没有办法在Android创建Activity之前告诉它要创建的方向呢?(但不能在清单中指定)

super.onCreate(icicle); 之后加上您的 setRequestedOrientation(ScreenOrientation);。另外,您使用的是哪个API版本? - Praveenkumar
2
真的吗?他刚才说这就是导致不良行为发生的原因(因为活动是在创建后才设置方向,而此时它已经显示出来了)。 - matt5784
1
API:13(3.2)。此外,我已经尝试在super.OnCreate后调用setRequestedOrientation(ScreenOrientation),但无论我把它放在哪里调用,行为都是相同的。唯一有效的方法是在清单中设置方向,但我会有副作用,就像我描述的那样。 - Christian
2个回答

11

我通过在清单文件中设置screenOrientation为"behind"来解决这个问题:

        android:screenOrientation="behind"

4
这个方法不是为了那个目的。请查看文档:http://developer.android.com/guide/topics/manifest/activity-element.html#screen。 - JVillella
如果您希望新创建的活动方向与先前关闭的活动相同,则此解决方案非常好。 - AllwiN

9

我使用清单中的这个声明解决了它:

android:screenOrientation="locked"

在清单文件中声明的每个活动都存在此问题。

并且继续使用setRequestedOrientation()方法在onCreate()方法内编程定义横向或纵向方向,

希望它有所帮助!


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接