コンピュータクワガタ

かっぱのかっぱによるコンピュータ関連のサイトです

Android TIPS No.01 状態による機能変更

Android入門はもう少しありますが、それ以外でのAndroidの開発機能で面白い部分を取り上げていく(予定)。No.02まではできています。

状態による機能変更

端末の向きで動作を変える

今までエミュレータの状態は縦で行ってきた。当たり前だが実際の端末では縦にも横にも使用される。エミュレータでも縦、横の状態は変更できる。変更するにはCtrl+F11を押す。また、縦横の状態でレイアウトファイルを別のものにすることができる。ここではActirivtyのライフサイクルとともにそれを確認する。まず以下の条件でプロジェクトを作成する。

項目 内容
Project name TipsActivity
Build Target Android 1.6
Application name TipsActivity
Package name sample.ta
Create Activity TipsActivity
Min SDK Version 4

まず通常通りmain.xmlで端末が縦の場合のレイアウトを定義する。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textColor="#0000ff"
    android:textSize="40sp"
    android:text="縦"
    />
</LinearLayout>

次に、端末が横向きの場合のレイアウトファイルを作成する。場所はres/layout-land/main.xmlとなる。ここでlayoutフォルダの後につけた-landが横向きの場合という定義となる。端末が横向きの場合にはこのファイルが使用される。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    >
<TextView  
    android:layout_width="fill_parent" 
    android:layout_height="wrap_content" 
    android:textSize="40sp"
    android:textColor="#ff0000"
    android:text="横"
    />
</LinearLayout>

最後にTipsActivity.javaを以下のようにする。特に何もしておらずレイアウトファイルを読み込み、かつ状態が変わるたびにログを出力しているだけである。

package sample.ta;

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;

public class TipsActivity extends Activity {
    private static final String LOG_TAG = TipsActivity.class.getSimpleName();

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        Log.i(LOG_TAG, "onCreate");
        setContentView(R.layout.main);
    }

    @Override
    protected void onStart() {
        super.onStart();
        Log.i(LOG_TAG, "onStart");
    }

    @Override
    protected void onResume() {
        super.onResume();
        Log.i(LOG_TAG, "onResume");
    }

    @Override
    protected void onRestart() {
        super.onRestart();
        Log.i(LOG_TAG, "onRestart");
    }

    @Override
    protected void onPause() {
        super.onPause();
        Log.i(LOG_TAG, "onPause");
    }

    @Override
    protected void onStop() {
        super.onStop();
        Log.i(LOG_TAG, "onStop");
    }

    @Override
    protected void onDestroy() {
        super.onDestroy();
        Log.i(LOG_TAG, "onDestroy");
    }
}

まず、通常通り起動すると以下のように縦表示でActivityが表示される。

その時のログは以下のようになっている。

次に、Ctrl+F11を押して端末を横向きにする。

同時にログを確認すると以下のようになっている。

一度ActivityがonDestroyで破棄されて再度onCreateによりActivityが構築されているのがわかる。つまり縦横のレイアウトが自動で読み込まれるのは、Activityの再構築が行われているためである。