Активность только в портретном или обратном портрете - PullRequest
15 голосов
/ 07 октября 2011

Я хочу, чтобы моя активность была доступна только в портретном режиме - портретном и обратном портретах.Как мне этого добиться?Когда я установлю android:screenOrientation="portrait", это приведет к тому, что активность будет только в нормальном портрете - наоборот, с reversePortrait.

Пожалуйста, не говорите мне, что это плохой подход к ориентации с применением силы / блокировки.Я знаю об этом, но все же клиент запрашивает это.Спасибо за понимание и за любые идеи.

ОБНОВЛЕНИЕ: API уровня 11 и выше

Ответы [ 3 ]

40 голосов
/ 07 октября 2011

Если вы на уровне API 9+, используйте android:screenOrientation="sensorPortrait".

Портретная ориентация, но может быть либо нормальной, либо обратной портретной ориентацией в зависимости от датчика устройства.Добавлено в уровень API 9.

Документация

1 голос
/ 01 августа 2014

Для потомков, я использую это для обратной совместимости ...

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);
}
0 голосов
/ 07 октября 2011

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

Вы можете попробовать это:)

...