読者です 読者をやめる 読者になる 読者になる

日々精進

新しく学んだことを書き留めていきます

screen orientationの設定値とその効果一覧

Android

画面を時計回りに90度回転して横向きにすると画面が逆さまになる不具合が発生した。原因はmanifestで横画面のactivityにandroid:screenOrientation="landscape"を設定していることだった。 landscapeは反時計回りに90度回転して横向きにした向きのことで、時計回りに90度回転して横向きにした向きはreverseLandscapeであるらしい。 どちらの向きでも逆さまにならないようにするにはuserLandscapeにすればよい。これは端末の向きを横にした場合画面を横向きにするが、ユーザが端末設定で回転をロックしている場合は横にしないという設定。

orientationは似た設定がいっぱいあって紛らわしいのでまとめてみた。

設定 効果 使用できるAPIレベル
unspecified いくつかの端末で確認したところuserと同じ挙動だった。が、公式ドキュメントによると端末にベストなorientationを決めさせるよ!と書いてあるので端末毎の挙動が違いそう。ある端末ではなぜか画面が回転しない!といったトラブルを避けるためには使わない方がいいかも。 level 1
landscape 縦向きから反時計回りに90度回転した向き。端末の向き・ユーザの端末設定は無視する。 level 1
portrait 縦向き。端末の向き・ユーザの端末設定は無視する。 level 1
user 端末の向きを変えると画面の向きも変わる。ただし、ユーザが端末設定で回転をロックしている場合は変わらない level 1
behind activity stack の直下の activity と同じ向き level 1
sensor 端末の向きを変えると画面の向きも変わる。ユーザの端末設定は無視する。 level 1
nosensor 現在の向きに固定する level 1
sensorLandscape 端末の向きを変えると画面の向きも変わる。ただし、横向きのみ。ユーザの端末設定は無視する。 level 9
sensorPortrait 端末の向きを変えると画面の向きも変わる。ただし、縦向きのみ。ユーザの端末設定は無視する。 level 9
reverseLandscape 縦向きから時計回りに90度回転した向き。端末の向き・ユーザの端末設定は無視する。 level 9
reversePortrait 端末を逆さまにした向き(portraitから180度回転した向き)。端末の向き・ユーザの端末設定は無視する。 level 9
fullSensor 端末の向きを変えると画面の向きも変わる。ユーザの端末設定は無視する。公式ドキュメントには「sensorとの違いは0,90,180,270度すべての方向に回転できるところ」と書いてあるが、手元の端末で設定をsensorにしてもすべての方向に回転できたし何が違うのか分からない。。 level 9
userLandscape 端末の向きを変えると画面の向きも変わる。ただし、横向きのみ。ユーザが端末設定で回転をロックしている場合は変わらない level 18
userPortrait 端末の向きを変えると画面の向きも変わる。ただし、縦向きのみ。ユーザが端末設定で回転をロックしている場合は変わらない level 18
fullUser 端末の向きを変えると画面の向きも変わる。ただし、ユーザが端末設定で回転をロックしている場合は変わらない。公式ドキュメントには「userとの違いは0,90,180,270度すべての方向に回転できるところ」と書いてあるが、手元の端末で設定をuserにしてもすべての方向に回転できたし何が違うのか分からない。。 level 18
locked 現在の向きに固定する level 18

イマイチ不明なところは以下。

  • nosensorとlockedの違い
  • sensorとfullSensorの違い
  • userとfullUserの違い

あと、一部APIレベルが18とか割と最近のバージョンになっているので注意。 lockedをAPI level18未満の端末でlockedを指定するとunspecifiedと同じ挙動になっているようだった。例外は投げられない。

参考:

http://developer.android.com/reference/android/R.attr.html#screenOrientation