仅在纵向或反向纵向活动

我希望我的活动只在肖像模式下可用 – 纵向和反向肖像。 我怎样才能做到这一点? 当我设置android:screenOrientation="portrait" ,它将强制活动只在正常的肖像 – 反之亦然reversePortrait。

请不要告诉我,强制/locking方向是一个不好的方法。 我知道,但仍然是客户要求。 感谢您的理解和任何想法。

更新: API级别11和更高

Solutions Collecting From Web of "仅在纵向或反向纵向活动"

如果您的API级别为9+,请使用android:screenOrientation="sensorPortrait"

纵向定位,但可以是基于设备传感器的正常或反向纵向。 在API级别9中添加。

文档

AndroidManifest.xml

 android:screenOrientation="portrait|reversePortrait" android:configuration="keyboardHidden|orientation" 

在你的WhateverActivity.java

 protected void onConfigurationChanged(Configuration newConfig) { int currentOrientation = getResources().getConfiguration().orientation; if(newConfig.orientation == ActivityInfo.SCREEN_ORIENTATION_PORTRAIT || newConfig.orientation == ActivityInfo.SCREEN_ORIENTATION_REVERSE_PORTRAIT) { super.onConfigurationChanged(newConfig); } } 

你可以试试这个:)

为了后代的缘故,我用这个向后兼容…

 public final class OrientationHelper { @TargetApi(Build.VERSION_CODES.GINGERBREAD) public static void setRequestedOrientationSensorPortrait(Activity activity) { if (Build.VERSION.SDK_INT > Build.VERSION_CODES.FROYO) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_PORTRAIT); } else { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } } @TargetApi(Build.VERSION_CODES.GINGERBREAD) public static void setRequestedOrientationSensorLandscape(Activity activity) { if (Build.VERSION.SDK_INT > Build.VERSION_CODES.FROYO) { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_SENSOR_LANDSCAPE); } else { activity.setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } } } 

用法

 @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); OrientationHelper.setRequestedOrientationSensorPortrait(this); super.setContentView(R.layout.my_layout); }