web-dev-qa-db-ja.com

Androidの横向きモードでのみディスプレイを回転させるにはどうすればよいですか?

ビューが横向きモードでのみ時計回りと反時計回りに回転するようにしたい。

Android <2.2の反時計回りのみについて読みましたが、それは問題ではありません。私のアプリは今のところ+2.2になります。

構成の変更をキャッチするようにマニフェストを変更します

Android:configChanges="keyboardHidden|orientation"

構成の変更をキャッチするためにアクティビティをオーバーライドします

@Override
public void onConfigurationChanged(Configuration newConfig) {

オリエンテーションをキャッチする方法を知っています

Display display = ((WindowManager) getSystemService(WINDOW_SERVICE)).getDefaultDisplay();
int rot = display.getRotation();

しかし...適切な風景の向きをトリガーする方法がわかりません、私はこれを行っています:

if (rot == Surface.ROTATION_90 || rot == Surface.ROTATION_270){
  setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);
}

しかし、常に反時計回りに回転します:

左右の横向きを設定するにはどうすればよいですか?

---([〜#〜]編集[〜#〜]

マニフェストで方​​向を設定した場合:

Android:screenOrientation = "landscape"

アクティビティのレイアウトは常に「左の風景」のままで、左と右の風景を変更したい:S

24
rubdottocom

Android 2.3以降のアプリを構築している場合は、マニフェスト属性を次のように設定する必要があります

Android:screenOrientation = "sensorLandscape"

アプリは(左または右の)横向きの位置に回転します。

Android 2.2以前でアプリを構築しているが、Android 2.3以降で「sensorLandscape」構成として実行したい場合は、試してみてください。このようなもの

public static final int Android_BUILD_Gingerbread = 9;
public static final int SCREEN_ORIENTATION_SENSOR_LANDSCAPE = 6;

@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (Build.VERSION.SDK_INT >= Android_BUILD_Gingerbread) {
        setRequestedOrientation(SCREEN_ORIENTATION_SENSOR_LANDSCAPE);
    }
...

私の場合、これが横向きの変更を処理するための最良の方法でした。 Android 2.2以前では、画面を左右の横向きに回転させるより良い方法を見つけることができませんでした。センサーの向きを読み取り、それに基づいて横向きの位置を設定してみましたが、 「setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE);」を呼び出すとすぐにセンサーがオフになり(アプリ/アクティビティ用)、センサーから方向を読み取ることができないようです。

ところで、これを正しく機能させるために、「onConfigurationChanged(ConfigurationnewConfig)」をオーバーライドする必要はありません。

60
croc

マニフェストアクティビティ宣言では、代わりに

Android:screenOrientation = "landscape"

使用する

Android:screenOrientation = "sensorLandscape"

7
Andrei Lupsa

これをアクティビティタグ内のマニフェストに追加して、自動的に処理されるかどうかを確認しましたか?

Android:screenOrientation = "landscape"
1
blindstuff

AndroidManifest.xml->アプリケーション->アクティビティを選択->画面の向き=横向き。

0
Daniel