レイアウトを定義する

 Androidでは、プログラム内で使用される文字列や画像、レイアウトなどの一連の情報をリソースファイルというファイルで定義するのが一般的である。具体的には「res」ディレクトリ配下に格納されたファイル群である。

 早速、プロジェクトのルート・ディレクトリから「res/layout/main.xml」を開いてみよう。

<?xml version="1.0" encoding="utf-8"?>
<!-- mainアクティビティ用 -->
<LinearLayout
	xmlns:android="http://schemas.android.com/apk/res/android"
	android:orientation="vertical"
	android:layout_width="fill_parent"
	android:layout_height="fill_parent">
	<!-- リストビュー -->
	<ListView
		android:id="@android:id/list"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" />
	<!-- リストが空のときに表示 -->
	<TextView
		android:id="@android:id/empty"
		android:layout_width="wrap_content"
		android:layout_height="wrap_content" />
</LinearLayout>

 ここで出て来る「リストビュー」とは、配列やコレクションなどの複数の項目を一覧で表示したいときに使うビューである。リストビューのIDは通常「@android:id/list」で指定し、表示する要素が何もない場合は「@android:id/empty」で指定したテキストビューを表示する。

 また、このアプリではリストビューの各行に、データを表示するための個別のビューを別途定義している。メニューのFile > New > Android XML Fileから、新規のXMLファイルを作成しよう。以下のコードは、「item_row.xml」という名前で行のレイアウトを定義した例である。

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout
	android:id="@+id/item_container"
	android:layout_width="fill_parent"
	android:layout_height="wrap_content"
	android:orientation="vertical"
	xmlns:android="http://schemas.android.com/apk/res/android">
	<TextView
		android:id="@+id/item_title"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:textColor="#ffffff"
		android:textSize="18sp"
		android:lines="1" />
	<TextView
		android:id="@+id/item_descr"
		android:layout_width="fill_parent"
		android:layout_height="wrap_content"
		android:lines="2"
		android:ellipsize="end" />
</LinearLayout>

 実際の画面に表示すると図3のようになる。それぞれ上段が記事のタイトル、下段が記事の本文を示している。

図3●行のビューを描画したところ
図3●行のビューを描画したところ

 「TextView」のプロパティ内では、「android:line」属性によりTextViewコンポーネントに表示させるテキストの行数を指定している。また「android:ellipsize」属性で、テキストが省略された際に記号(「...」)をどのように出力するかを指定している(この例では、末尾に省略記号を挿入している)。

 ここで作成したXMLファイルは、「Adapter」クラスを生成する際に引数として指定する。Adapterとは、一連のデータをリストビューに渡す際に必要となる、いわば「橋渡し」のようなものである。これについては後に説明する。