2011-10-07 4 views
14

ポートレートモードとポートレートモードの両方で、自分のアクティビティを使用できるようにします。どうすればこれを達成できますか? android:screenOrientation="portrait"を設定すると、通常のポートレートでのみ動作するようになります。逆の場合は逆ポートレートで動作します。ポートレートまたは逆ポートレートのアクティビティのみ

強制的に/向きを固定するのは悪い方法です。私はそれについて知っているが、依然としてクライアントはそれを要求している。理解していただきありがとうございました。

UPDATE: APIレベル11と高い

+4

悪くないアプローチIMO、いくつかのアプリ/ゲームがちょうど特定の方向で正しく動作しません。 – Ricky

+0

リッキーありがとう。私はちょうど同様の記事でそれについて論じる人々を見たので、私は本当に肖像画だけが必要であることを明確にしたいと思っていました。 – Speedy

+0

多くの電子商取引アプリケーションもロックの向きがありません – Killer

答えて

37

あなたはAPIレベル9+上にある場合、android:screenOrientation="sensorPortrait"を使用しています。

AndroidManifest.xml

Portrait orientation, but can be either normal or reverse portrait based on the device sensor. Added in API level 9.

Documentation

+0

ありがとうございます!私はその価値を見逃してしまったのです。そして、はい、私はAPI 11以上です+これは完全に動作します。 – Speedy

+4

私はapi 15でtypo-edバージョン "sensorPortait"を使用しなければなりませんでした。 – Richard

+0

これは、ビューを正しく回転させますが、イベントは発生しません。オリエンテーションが通常ビューから逆ビューに変わるときにイベントをキャプチャする必要があります。どうやってするか? – StarDust

1

あなた WhateverActivity.java
android:screenOrientation="portrait|reversePortrait" 
android:configuration="keyboardHidden|orientation" 

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

ありがとう、これは良い答えですが、私がAPI 11+(Honeycomb)を使用していることを忘れてしまったので、alextcの答えは私の方に適していて、うまく機能します。なぜか分からないけど、AAPTのエラーが出ます。私は2つの値を使用することができませんでした:( – Speedy

+12

@xjaphx、android:screenOrientation = "portrait | reversePortrait"。 ( 'screenOrientation'で値 'portrait | reversePortrait') "。 –

+0

@PaulAnnekovこれは簡単な列挙型なので、" | "を使用して値の組み合わせを使用することはできません –

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