画面の向き(ScreenOrientation)

Last-modified: 2017-07-11 (火) 12:24:46

アクティビティに対して画面の縦・横の固定や、センサーによる表示の切り替えを指定/取得できます。

 

画面の向きの設定

 

リファレンス:http://developer.android.com/guide/topics/manifest/activity-element.html#screen

 

画面の向きはAndroidManifest.xml内でActivityに対してandroid:screenOrientationで設定します。

<!-- ScreenOrientationSample -->
<activity android:name="android.wiki.sample.ScreenOrientationSampleActivity"
    android:label="@string/app_name" android:screenOrientation="unspecified">
    <intent-filter>
        <action android:name="android.intent.action.MAIN" />
        <category android:name="android.intent.category.LAUNCHER" />
    </intent-filter>
</activity>
 

下記が指定値と結果になります。
こちらの例ではあらかじめ縦、横で背景、ビューの位置が異なるレイアウトを用意しています。

 
モード縦長表示横長表示説明
unspecified(デフォルト)land_tall.gifport_wide.gifシステムが自動選択します。(デバイスによって異なる)

ユーザの操作(エミュレータではCtrl+F11)によって切り替わります
portrait(縦固定)land_tall.gifport_tall.gif常に縦レイアウトを使用します
landscape(横固定)land_wide.gifport_wide.gif常に横レイアウトを使用します
userland_tall.gifport_wide.gif現在のレイアウトに従います

ユーザの操作(エミュレータではCtrl+F11)によって切り替わります
behindland_tall.gifport_wide.gif親のアクティビティに従います

ユーザの操作(エミュレータではCtrl+F11)によって切り替わります
sensorセンサーに従います

実機がないので試せていません
nosensorセンサーを無視します。ユーザの操作に基づいて回転しない点以外は、unspecifiedを指定したのと同じ動きになります。

実機がないので試せていません

画面の向きの取得

現在の画面の向きはActivityから下記のように取得できます。

Configuration config = getResources().getConfiguration();
// Landscape(横長)
if(config.orientation == Configuration.ORIENTATION_LANDSCAPE) {
    Toast toast = Toast.makeText(this, "Landscape", Toast.LENGTH_SHORT);
    toast.show();
}
// Portrait(縦長)
else if (config.orientation == Configuration.ORIENTATION_PORTRAIT) {
    Toast toast = Toast.makeText(this, "Portrait", Toast.LENGTH_SHORT);
    toast.show();
}
// Square(正方形) エミュレータではこの値は返って来ない。
else if (config.orientation == Configuration.ORIENTATION_SQUARE) {
    Toast toast = Toast.makeText(this, "Square", Toast.LENGTH_SHORT);
    toast.show();

}

 

  • 参考になりました。 (// -- 2017-07-11 (火) 12:24:46
  • おっぱい吸う。ウワッハア!! -- 2015-04-27 (月) 16:51:43
  • すみません、先のコメントは説明を読み間違えてました。無視してください。 -- 2013-04-18 (木) 15:33:43
  • nosensorの説明が違いませんか?横長の端末ではlandscapeと同じになります。つまりセンサーに関わらず端末元来の向きに固定するという値だと思います。 -- 2013-04-18 (木) 15:29:23
  • あかさたな -- 2012-10-07 (日) 22:04:05
  • 画面が正方形のエミュレータを使えば取れる -- 2011-12-26 (月) 15:18:05
  • あああ -- 2011-05-17 (火) 15:09:54
  • 画面向き イベント -- 2009-08-03 (月) 19:13:06