在活动可见之前设置屏幕方向

3
阅读有关setRequestedOrientation的android文档,我发现:
更改此活动的所需方向。如果该活动当前在前台或以其他方式影响屏幕方向,则屏幕将立即更改(可能导致活动重新启动)。否则,这将在下次活动可见时使用。
"否则,这将在下次活动可见时使用。" 听起来很好-只需在活动变得可见之前设置即可。 糟糕了。在哪里调用它?实际上,在onCreate之前我们没有对活动的引用。如何设置屏幕方向呢?
更新: - 我的想法是直接创建所需方向的活动。当用户从设置中选择方向时-设置屏幕方向并在此之后启动的所有活动-知道所需方向/例如,如果他们使用清单中的值/。如果我知道所需的方向-就没有理由创建活动,设置方向并再次创建它。

你是想强制屏幕方向为特定方向(横屏,竖屏)吗?如果是的话,你可以在 Android Manifest 中指定该信息。 - Gophermofur
为什么不尝试将其作为onCreate中的第二行并查看是否有效?如果我试图回答你的问题,那就是我会做的。 - mwengler
希望您现在已经解决了这个问题。我的评论是关于投票反对一个答案的。您最初的问题(未更新时)并没有表明您正在尝试根据用户偏好设置方向。老的答案是基于那一点而被您投票反对了。 - Hassan
4个回答

2
我曾遇到与您类似的问题,即用户在设置中已知并设置Activity方向,我希望以所需方向启动Activity。我的解决方法是锁定Activity的方向:
android:screenOrientation="locked"
即可。"最初的回答"
   <activity android:name=".SomeActivity"
      android:label="@string/app_name"
      android:screenOrientation="locked">

在onCreate()中,我调用了setRequestedOrientation()函数:
这样就不会再重新启动了。

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)之后)。应用程序通常不会实现此方法;它旨在供系统类在应用程序代码运行后进行最终初始化使用。
派生类必须调用此方法的超类实现。如果他们没有这样做,就会抛出异常。

0
    v.getViewTreeObserver().addOnGlobalLayoutListener(new ViewTreeObserver.OnGlobalLayoutListener() {
        @Override
        public void onGlobalLayout() {
            v.getViewTreeObserver().removeOnGlobalLayoutListener(this);                // reset
            Screen.Lock(); // lock
        }
    });

在onCreate()的结尾处


-1
如果您想为活动设置屏幕方向,请在AndroidManifest.xml文件中使用此代码片段:
<activity android:screenOrientation="portrait" android:name="MyActivity"></activity>

或者

<activity android:screenOrientation="landscape" android:name="MyActivity"></activity>

我不知道开始之前的方向。这取决于用户选择的配置。 - Kostadin

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