Androidアプリ アクティビティとビュー
投稿日: | |
---|---|
タグ: |
目次
本稿では,ADTに生成されたばかりで何も機能を持たないAndroidアプリのソースコードの説明を行う.
Androidアプリ・プロジェクトの構成要素
プロジェクトを立ち上げると,生成されるファイルやディレクトリについて紹介する.とりあえず最初に理解しなければならない要素はこれらである(私見である).
AndroidManifest.xml | アプリケーションの情報や基本設定を記述したファイル | |
---|---|---|
src | ソースコードを格納するディレクトリ | |
res | 文字列やファイルなどの資源などを格納するディレクトリ. | |
layout | アクティビティの画面を表すファイルを格納するディレクトリ | |
values | 整数や文字列などの値を保持するファイルを格納するディレクトリ | |
menu | メニュー画面を表すファイルを格納するディレクトリ | |
drawable |
解像度毎に画像を格納するディレクトリ郡.
| |
raw | アプリケーション内で使用するファイル(例:テキストファイルやバイナリファイル)を格納するディレクトリ |
前述で紹介したもの以外にもさまざまなファイルやディレクトリが生成される.以下にその一部を紹介する.
gen | ADTが使用するディレクトリ | |
---|---|---|
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つを兼ね揃えたもの
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と値を設定するだけで良い.