5

通常、デバイスを90度回転させると(縦向きまたは逆向き)、構成が変更されたり、アクティビティが破棄されて再作成されたりするためDisplay.getRotation()、起動時の値を保存して操作できます。

ただし、デバイスを0から180(ポートレートからポートレート)または90から270(ランドスケープからランドスケープ)に直接回転させる場合、構成は変更されず、デバイスは画面を再マップするだけです。レイアウトのアスペクト比は変更されず、変更する必要がないため、これは理にかなっています。しかし、これにより、Activityは、そのような変更がいつ発生したか、つまり、いつSurface.ROTATION_90行ったかSurface.ROTATION_270などを検出できなくなります。

ポーリングとは別に、Display.getRotation()この変更を検出するためのより良い方法はありますか?

4

1 に答える 1

5

ヘルパークラスOrientationEventListenerを使用できます。

このようなもの:

public void onOrientationChanged(int orientation) {
   if (orientation == ORIENTATION_UNKNOWN) return;

   int rotation = activity.getWindowManager().getDefaultDisplay()
         .getRotation();
   int degrees = 0;
   switch (rotation) {
     case Surface.ROTATION_0: ....
     case Surface.ROTATION_90: ....
     case Surface.ROTATION_180: .....
     case Surface.ROTATION_270: .....
   }

}
于 2013-02-03T19:04:05.877 に答える