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

时间:2012-04-24 13:03:23

标签: android screen orientation

仔细阅读有关setRequestedOrientation的android文档我发现:

  • 更改此活动的所需方向。如果活动当前处于前台或以其他方式影响屏幕方向,则将立即更改屏幕(可能导致重新启动活动)。否则,这将在下次活动可见时使用。

“否则,这将在下次活动可见时使用。” 听起来很棒 - 只需在活动变得可见之前设置。 哎呀。在哪里叫这个?实际上在onCreate之前我们没有参考活动。那么如何设置屏幕方向?

更新: - 我的想法是直接用所需的方向创建活动。当用户从设置中选择方向时 - 设置屏幕方向和之后开始的所有活动 - 知道所需的方向/如果他们使用manifest /中的值。如果我知道所需的方向 - 没有理由创建活动,设置方向并再次创建它。

5 个答案:

答案 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>