web-dev-qa-db-ja.com

ポートレートまたはリバースポートレートのみでのアクティビティ

自分のアクティビティをポートレートモード(ポートレートモードとリバースポートレートモード)の両方でのみ使用できるようにしたい。どうすればこれを達成できますか? Android:screenOrientation="portrait"を設定すると、アクティビティは通常のポートレートのみになります。reversePortraitではその逆になります。

フォース/ロックオリエンテーションへの悪いアプローチだと言わないでください。私はそれについて知っていますが、それでもクライアントはそれを要求しています。理解とアイデアをありがとう。

PDATE: APIレベル11以上

18
Speedy

APIレベル9以降を使用している場合は、Android:screenOrientation="sensorPortrait"を使用してください。

縦向きですが、デバイスセンサーに基づいて通常または逆の縦向きにすることができます。 APIレベル9で追加されました。

ドキュメント

41
user658042

後世のために、これを下位互換性のために使用します...

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

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

あなたはこれを試すことができます:)

0
Pete Houston