仔细阅读有关setRequestedOrientation的android文档我发现:
“否则,这将在下次活动可见时使用。” 听起来很棒 - 只需在活动变得可见之前设置。 哎呀。在哪里叫这个?实际上在onCreate之前我们没有参考活动。那么如何设置屏幕方向?
更新: - 我的想法是直接用所需的方向创建活动。当用户从设置中选择方向时 - 设置屏幕方向和之后开始的所有活动 - 知道所需的方向/如果他们使用manifest /中的值。如果我知道所需的方向 - 没有理由创建活动,设置方向并再次创建它。
答案 0 :(得分:1)
将它放入onCreate似乎是完全合理的。
http://russenreaktor.wordpress.com/2010/01/03/solved-set-screen-orientation-programmatically/
如果这不起作用,您可以尝试将其放入onPostCreate(Bundle)重写方法。
protected void onPostCreate(Bundle savedInstanceState)
从以下版本开始:API Level 1在活动启动完成时调用(在onStart()和onRestoreInstanceState(Bundle)之后调用)。应用程序通常不会实现此方法;它适用于系统类在应用程序代码运行后进行最终初始化。
派生类必须调用超类的此方法的实现。如果他们不这样做,将抛出异常。
答案 1 :(得分:0)
这篇文章中提到的问题有同样的道理。 关于这个问题的答案与这篇文章有关: Android screen orientation change have different behaviour on tablet
答案 2 :(得分:0)
我正在解决完全相同的情况,即活动方向是已知的,并由用户在“设置”中设置,我想以所需的方向启动活动。
对我来说,解决方案是锁定Activity的方向
android:screenOrientation =“锁定”
<activity android:name=".SomeActivity"
android:label="@string/app_name"
android:screenOrientation="locked">
和onCreate()我称为setRequestedOrientation():
不再重启。
答案 3 :(得分:0)
v.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
@Override
public void onGlobalLayout() {
v.getViewTreeObserver().removeOnGlobalLayoutListener(this); // reset
Screen.Lock(); // lock
}
});
在onCreate()结尾
答案 4 :(得分:-1)
如果您想为活动设置屏幕方向,请使用此剪切的AndroidManifest.xml文件:
<activity android:screenOrientation="portrait" android:name="MyActivity"></activity>
或
<activity android:screenOrientation="landscape" android:name="MyActivity"></activity>