Android端末の向きを固定する。
Android端末の向きを固定する方法をメモ。
調べてすぐ出てきたのは下記の2つ。
1.AndroidManifest.xmlにandroid:screenOrientationを追加する。
<activity android:name=".Orientation" android:label="@string/app_name" android:screenOrientation="landscape">
上記だと、"landscape"が指定されているので横向き固定になる。
まとめると下記パターンがある。
- "portrait" 縦
- "landscape" 横
- "unspecified" 端末の設定によって変化する?(向きの固定が事前されているとかかな…)
- "sensor" センサー状態に従う
- "nosensor" センダー状態に従わない以外はunspecifiedと同じ
2.setRequestedOrientationメソッドを呼んで設定する。
/** 画面の回転を抑制(現在の向きに固定) */ public void rotateLock(){ Configuration config = getResources().getConfiguration(); if (config.orientation == Configuration.ORIENTATION_PORTRAIT) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT); } else if(config.orientation == Configuration.ORIENTATION_LANDSCAPE) { setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE); } }
上記の関数を呼ぶと、現在の向きに固定する関数を作ってみました。
setRequestedOrientationに渡す引数によって固定され、渡すパターンは下記。
- "SCREEN_ORIENTATION_PORTRAIT" 縦
- "SCREEN_ORIENTATION_LANDSCAPE" 横
- "SCREEN_ORIENTATION_UNSPECIFIED" 端末の設定によって変化する
- "SCREEN_ORIENTATION_SENSOR" センサー状態に従う
- "SCREEN_ORIENTATION_UNSENSOR" センダー状態に従わない以外はUNSPECIFIEDと同じ
現在の向きに固定したいのであれば、上記の関数を呼んでしまう。
固定を解除したいのであれば、"SCREEN_ORIENTATION_UNSPECIFIED"を指定して「setRequestedOrientation()」を呼んであげると固定解除になる。
正直、センサーの状態に従う、従わないがよくわからない…(´・ω・`)