monaka android memo

Androidの勉強中!調べたことを忘れないためのブログです!

Android端末の向きを固定する。

Android端末の向きを固定する方法をメモ。
調べてすぐ出てきたのは下記の2つ。

1.AndroidManifest.xmlandroid: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()」を呼んであげると固定解除になる。
正直、センサーの状態に従う、従わないがよくわからない…(´・ω・`)