2011年5月28日土曜日

[Android] 画面の向きを設定するには

How to change the orientation of the activity.

Androidのアプリケーション(Activity)は画面の向き(縦・横)を設定できます。
設定する方法はいくつかあります。

1.マニフェスト(AndroidManifest.xml)のandroid:screenOrientationに設定する
2.ActivityのsetRequestedOrientationで設定する

今回は「2.ActivityのsetRequestedOrientationで設定する」の方法で画面の向きを自由に変更するアプリケーションを作ってみます。

(パーミッションは不要なのでマニフェストは省略します)
レイアウト(main.xml)

Activity(Main.java)
(1)縦レイアウトに固定
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_PORTRAIT)
端末を横に向けても縦レイアウトを維持します。

(2)横レイアウトに固定
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_LANDSCAPE)
端末を縦に向けても横レイアウトを維持します。

(3)端末の向きに連動
setRequestedOrientation(ActivityInfo.SCREEN_ORIENTATION_UNSPECIFIED)
端末の向きに合わせて自動的に画面の向きが変わります。初期状態です。

(4)現在の画面の向きを知る
getResources().getConfiguration().orientation
を参照します。
(参考:[Android] 画面の回転に反応するウィジットアプリケーションを作るには #2
このソースはActivity起動時の画面の向きを設定しています。
setRequestedOrientation(getResources().getConfiguration().orientation)
Activity起動時に縦レイアウトなら横にしても縦レイアウトのままです。

※注意事項
Androidは画面の向きが変わるたびに[Intent.ACTION_CONFIGURATION_CHANGED]をブロードキャストします。
バックグランドでこのブロードキャストを受け取るたびに何らかの処理をするアプリケーションがたくさんあると思います。
ブロードキャストを発信するアプリケーションは、他のアプリケーションに影響を与えることがあるかもしれません。
また、Activityの向きが変わるたびにonConfigurationChangedメソッドが呼ばれます。onConfigurationChangedメソッドで画面の向きを設定するコードを書くと無限ループします。

auのAQUOS PHONE IS11SHは縦レイアウトで使う機会が多いと思いますが、REGZA Phone IS11Tは横レイアウトで使う機会が多そうです。
画面の向きは固定させずに端末の向きあわせてレイアウトを対応させるのが無難だと思います。


以上、参考になれば幸いです。

0 件のコメント:

コメントを投稿