仅限纵向或反向肖像活动

时间:2011-10-07 11:17:52

标签: android android-layout screen-orientation

我希望我的活动仅在两种肖像模式下都可用 - 肖像和reversePortrait。我怎样才能做到这一点?当我设置android:screenOrientation="portrait"时,它将强制活动仅在正常肖像中 - 反之亦然,使用reversePortrait。

请不要告诉我强行/锁定方向不好。我知道,但客户仍在请求它。感谢您的理解和任何想法。

更新:API级别11及更高级别

3 个答案:

答案 0 :(得分:40)

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

  

纵向方向,但可以是普通或反向纵向   基于设备传感器。在API级别9中添加。

Documentation

答案 1 :(得分:1)

为了后人的缘故,我使用它来向后兼容...

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);
}

答案 2 :(得分:0)

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);
    }
}

你可以试试这个:)