My Photo

« 新潟生存戦略 | Main | 今週のご飯 »

October 15, 2011

Androidアプリ開発メモ027:画面の向き

表示の向きの設定

デフォルトではデバイスを回転させたときに画面の表示が縦長・横長に変化する。
この画面表示の変化に対する設定は、AndroidManifest.xmlでActivity要素のandroid:screenOrientation属性で指定する。

<activity
  android:name=".DisplayExample"
  android:label="@string/app_name"
  android:screenOrientation="portrait">
  <intent-filter>
    <action android:name="android.intent.action.MAIN" />
    <category android:name="android.intent.category.LAUNCHER" />
  </intent-filter>
</activity>

android:screenOrientation属性の値は以下。

unspecified デフォルト。システムが向きを選択する。
portrait 縦長表示固定。
landscape 横長表示固定。

他にuser,behind,sensor,nosensorがあるが、上記の3つを覚えていればいいだろう。
ちなみにsensorと指定したところ、Xperia rayで少し試した程度だがunspecifiedと同じだった。

表示の向きの取得

現在の表示の向きはDisplay#getRotation()で取得できる。

android.view.Displayクラス
public int getRotation()
"自然な"方向からの画面の回転を返す。
戻り値はSurface.ROTATION_0(回転なし)、Surface.ROTATION_90、Surface.ROTATION_180 または Surface.ROTATION_270。

screenOrientation="unspecified"なサンプルアプリを実機で動かすと、以下のようになった。
1.デバイスを普通に縦に持った状態
Androidrotation1

2.デバイスを1から左に90度回転状態
Androidrotation2

3.デバイスを1から右に90度倒回転状態
Androidrotation3

4.デバイスを1から左に180度回転
Androidrotation4

"自然な"方向から表示の向きの時計回り方向の角度を定数で返しているのかな。
180度回転したら縦長表示になると思ってたが、横長表示のままだった。

サンプルアプリのコードは以下。

package com.example.displayexample;

import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.view.Display;
import android.view.Surface;
import android.view.View;
import android.view.WindowManager;
import android.widget.Button;
import android.widget.TextView;


/**
 * Display#getRotation()で返ってくる値を確認するサンプル
 */
public class DisplayExample extends Activity {
  
  private Display display;
  
  /** Called when the activity is first created. */
  @Override
  public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);
    
    final TextView textView = (TextView)findViewById(R.id.textView1);
    Button button = (Button)findViewById(R.id.button1);
    
    WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE);
    display = wm.getDefaultDisplay();
    
    button.setOnClickListener(new View.OnClickListener() {
      @Override
      public void onClick(View v) {
        int rotation = display.getRotation();
        String strRotation;
        switch (rotation) {
        case Surface.ROTATION_0:
          strRotation = "0";
          break;
        case Surface.ROTATION_90:
          strRotation = "90";
          break;
        case Surface.ROTATION_180:
          strRotation = "180";
          break;
        case Surface.ROTATION_270:
          strRotation = "270";
          break;
        default:
          strRotation = "null";
        }
        textView.setText("getRotation=" + strRotation);
      }
    });
  }
}

参考ページ:
画面の向き(ScreenOrientation) - Android Wiki*
Android, 画面の幅・高さ・傾きを調べる : Serendip - Webデザイン・プログラミング

« 新潟生存戦略 | Main | 今週のご飯 »

Androidアプリ開発」カテゴリの記事

Comments

Post a comment

(Not displayed with comment.)

TrackBack

TrackBack URL for this entry:
http://app.cocolog-nifty.com/t/trackback/26461/52995299

Listed below are links to weblogs that reference Androidアプリ開発メモ027:画面の向き:

« 新潟生存戦略 | Main | 今週のご飯 »

September 2017
Sun Mon Tue Wed Thu Fri Sat
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
無料ブログはココログ

日本blog村

  • にほんブログ村 IT技術ブログへ
  • にほんブログ村 アニメブログへ
  • にほんブログ村 サッカーブログ アルビレックス新潟へ

好きな音楽家

メモ

XI-Prof