魔術師見習いのノート

プロフィール

魔術師見習い
Author魔術師見習い-_-.
Twitter魔術師見習い

コンピュータ関係のメモを主に書きます.

MENU

Androidアプリ アクティビティとビュー

投稿日:
タグ:

目次

本稿では,ADTに生成されたばかりで何も機能を持たないAndroidアプリのソースコードの説明を行う.

Androidアプリ・プロジェクトの構成要素

プロジェクトを立ち上げると,生成されるファイルやディレクトリについて紹介する.とりあえず最初に理解しなければならない要素はこれらである(私見である).

AndroidManifest.xmlアプリケーションの情報や基本設定を記述したファイル
srcソースコードを格納するディレクトリ
res文字列やファイルなどの資源などを格納するディレクトリ.
layoutアクティビティの画面を表すファイルを格納するディレクトリ
values整数や文字列などの値を保持するファイルを格納するディレクトリ
menuメニュー画面を表すファイルを格納するディレクトリ
drawable 解像度毎に画像を格納するディレクトリ郡.
drawable-ldpi
低解像度なディスプレイ用の画像を格納するディレクトリ
drawable-mdpi
中解像度なディスプレイ用の画像を格納するディレクトリ
drawable-hdpi
高解像度なディスプレイ用の画像を格納するディレクトリ
drawable-xdpi
より高解像度なディスプレイ用の画像を格納するディレクトリ
drawable-xxdpi
最大限高解像度なディスプレイ用の画像を格納するディレクトリ
rawアプリケーション内で使用するファイル(例:テキストファイルやバイナリファイル)を格納するディレクトリ
本稿ではここで挙げたリソースのうち,見た目を司るもの(ビュー)をいくつかを紹介する.そして,それらとプログラムの対応付けについて説明する.

前述で紹介したもの以外にもさまざまなファイルやディレクトリが生成される.以下にその一部を紹介する.

genADTが使用するディレクトリ
libsライブラリを格納するディレクトリ
bin実行ファイルを格納するディレクトリ
これらやここで紹介しなかったディレクトリやファイルは,プログラマがあまり意識する必要がないものや,簡単なアプリケーションでは使用しないものである.

ソースコード

Androidアプリがプログラムである以上,ソースコードがあるのは当然である.AndroidアプリはJava言語で記述される.一般的なJavaの言語処理系は,純粋なマシン語ではなく,Java仮想マシンで動くコードにコンパイルする.ただし,Androidアプリを動かすDalvik仮想マシンは純粋なJava VM向けのバイナリコードは実行できない.Dalvik仮想マシンに関する詳細はここでは言及しない.また,Javaの言語仕様についてもここでは言及しない.

Androidアプリケーションを実行すると,AndroidManifest.xmlで設定したアクティビティクラス(あるいはそれを継承したクラス)のインスタンスを生成し,onCreate関数が呼び出す.

package com.example.test1;

public class MainActivity extends android.app.Activity {
        @Override
        protected void onCreate(android.os.Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
		/*
		  追加コード
		*/
        }
}

アクティビティの状態遷移図を以下に示す.

リソース

リソースには3種類ある.

  • リソースをXMLで表現したもの
  • 格納されたファイル自体がリソースであるもの
  • 2つを兼ね揃えたもの
valuesは1つ目で,drawableやrawは2つ目,layoutやmenuは3つ目に属する.全てのリソースには名前があり,それらはプログラム内で整数型のデータの変数名として扱われる.これらの変数はADTによって自動生成され,それぞれ一意に定まる値が割り当てられる.そのため,新たにリソースを使用する場合,Eclipseの機能で追加するべきである(そうでなければ整合性がとれなくなるかもしれない).また,ファイル自体がリソースの場合,ファイル名から拡張子を除いたものがリソース名,つまり変数名になる.

layout

アクティビティの画面を形成するためのリソースをレイアウトという.レイアウトを使用せずにアクティビティを生成することは可能であるが,特別な意図がなければレイアウトを使った方が簡潔である.

アクティビティとレイアウトを対応付けるには,setContentView関数を使用する.初期画面のレイアウトをアクティビティに対応づけるには,onCreate内で呼び出せば良い.

package com.example.test1;

public class MainActivity extends android.app.Activity {
        @Override
        protected void onCreate(android.os.Bundle savedInstanceState) {
                super.onCreate(savedInstanceState);
                setContentView(R.layout.activity_main);
        }
}
レイアウトの変数はR.layoutに属する.なお変数の名前はレイアウトファイルのファイル名から拡張子を除いたものである.

ADTプラグインを含むEclipseでは,レイアウトの生成をテキストベースだけでなく,GUIで行うことができる.レイアウト生成ツールの画面は,次の4種類からなる.

  • アクティビティのレイアウト
  • アクティビティ上のビューの階層図
  • パレット ビューのテンプレート一覧
  • 各ビューのプロパティ(名前や色,サイズなどの情報)
用意されたビューのテンプレートはさまざまで,ビューの種類以上に多くのテンプレート用意されている(例えば文字付きボタンも文字の大きさでいくつか用意されている).また,ビューのプロパティのほとんどはプログラム内からも変更できる.

レイアウトはビュー(View)という見た目を司る要素の1つである.次に紹介するメニューもまたこの1つである.

menu

Androidアプリの右上にメニューを設置する場合,アクティビティの次の関数を定義すれば良い.

        @Override
        public boolean onCreateOptionsMenu(android.view.Menu menu) {
                getMenuInflater().inflate(R.menu.main, menu);
                return true;
        }
メニューはres/menu/内のXMLファイルで定義される.メニューの変数はR.menuで定義される.そして,getMenuInflater().inflate()でプログラムとメニューを対応づけることができる.

menuの作成は単純である.menuはいくつかの項目と項目のIDと表示される文字列からなる.新たに項目を追加したい場合,itemを追加しそのidと値を設定するだけで良い.

一覧