以编程方式删除方向限制

时间:2012-05-31 07:59:42

标签: android android-layout

在我的清单中,我设置的活动仅限于纵向。但是我需要在条件上删除这个限制。那么,我如何以编程方式实现删除方向限制?

upd:我目前的设置是:

    <activity
        android:name=".activity.MainActivity"
        android:label="@string/app_name"
        android:theme="@android:style/Theme.NoTitleBar"
        android:screenOrientation="portrait"
        android:configChanges="orientation">


 /**
 * Defines whether the device being used is a tablet and if so adds horizontal orientation option.
 */
     protected void _updateScreenOrientationModes(){
         if(((MyApplication) getApplication())._isTablet == true)
                setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);
         }

3 个答案:

答案 0 :(得分:19)

无论您是否在清单中设置android:screenOrientation,都可以使用Activity.setRequestedOrientation()以编程方式设置方向。

实质上,“删除限制”是通过

完成的
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED);

之后,当物理设备方向发生变化时,Activity将显示更改屏幕方向的默认行为。

但是,您可能希望实际匹配当前的物理设备方向。我没有尝试过,但我很确定如果您所做的就是上述内容,如果设备实际上处于横向状态,那么您将保持纵向模式直到您实际移动设备画像和回到风景。

我要做的是确保在您的清单中设置android:configChanges="orientation"并覆盖Activity.onConfigurationChanged(),您可以根据自己的情况执行方向更改或缓存方向。然后,只要您的情况发生变化,您就可以获得当前的物理方向,这样您就可以在必要时更改它。

答案 1 :(得分:2)

我将留下我的另一个答案,因为它解决了你提出的更普遍的问题。但是,在对别人的评论中你说:

  

我需要允许平板电脑同时具有方向和手机只有肖像

您的特定情况实际上比一般情况更容易:从您的清单中删除android:screenOrientation="portrait"android:configChanges="orientation"以允许默认行为。然后,在启动期间,如果设备是手机,请使用

强制纵向方向
    setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);

在运行时,设备显然不会在平板电脑或手机之间发生变化,因此您只需要在启动时执行此操作一次。平板电脑将获得默认行为,因此无论设备处于何种物理方向,这都是他们将使用的。手机将被强制成纵向并保持这种状态。

答案 2 :(得分:1)

以编程方式,您可以使用“setRequestedOrientation()”更改屏幕方向

在你的java类中根据你的条件编写以下代码.....

要更改为纵向模式,请使用ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE常量:

     setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);

要更改为纵向模式,请使用ActivityInfo.SCREEN_ORIENTATION_PORTRAIT常量:

   setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT);