ユーザインタフェースの更新
「Hello, World」の例では、いわゆる"プログラム的"なユーザインタフェースのレイアウトを利用したに過ぎません。
つまり、ユーザインタフェースのレイアウト情報がJavaのソースコードに直接書かれているのです。
レイアウト情報がソースコード中に存在すると、コードが肥大化して煩雑となり、デバッグがしづらくなります。
そのため、Androidでは、XMLをベースとしたユーザインタフェースの構築モデルを用意しています。
レイアウト用XMLファイルの例を以下に示します。
<?xml version="1.0" encoding="utf-8"?><TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/hello"/>
Androidアプリケーションが使用するレイアウト用XMLファイルはシンプルな構成です。
XMLツリー構造となっており、各要素はViewクラスの名前で定義されて今う。
レイアウト用XMLファイルに使用できるのは、Viewクラスを継承したクラスです。
上記のレイアウト用XMLファイルの例では、「TextView」という一つのView定義の中に5つのXML属性(アトリビュート)が存在します。
各XML属性の説明は下表のとおりです。
属性(アトリビュート) | 意味 |
xmlns:android | Android名前空間で定義されている共通属性を参照するために、XMLの名前空間を宣言しています。Android用のレイアウトを定義する際には、最初に定義しなければなりません。 |
android:id | TextView要素を特定するための属性です。このIDを利用して、ソースコードや他の資源定義用XMLからこのViewにアクセスすることができます。 |
android:layout_width | Viewが画面上の幅をどの程度使用するのか定義します。上記例の場合、ただ一つのViewしか存在しないので、「fill_parent」を指定してスクリーン全体を利用するように定義しています。 |
android:layout_height | Viewが画面上の高さをどの程度使用するのか定義します。 |
android:text | TextView上で表示させる文字列を定義します。上記例の場合、文字列をそのまま定義するのではなく、文字列リソースで定義された文字列を定義しています。実際の文字列は文字列リソースファイル「res/values/strings.xml」内で定義されています。このように文字列リソースファイルに定義しておくことで、国際化対応を容易に行うことができます。 |
レイアウト用XMLファイルは「res/layout/」ディレクトリに置かれます。
この「res」ディレクトリは、リソースを意味しており、ソースコード以外のものが置かれます。
レイアウトファイルに加え、画像、音源、国際化セッティング等が置かれます。
- 横向き時のレイアウトについて
- 画面が横向きにされた際に、縦向きとは異なるレイアウトにしたい場合は、「/res/layout-land」フォルダにXMLファイルを置きます。Androidは横向きを検知すると、横向きのレイアウトを利用します。横向きレイアウトが用意されていない場合、縦向きレイアウトを横長にして利用します。
Eclipseプラグインは自動的に「main.xml」というレイアウトファイルを1個生成します。
これまで作成した「Hello, World」では、ソースコード内にレイアウトを定義しているので、この「main.xml」ファイルは無視されています。
しかしながら、Androidフレームワークで開発する場合は、レイアウトはソースコード内ではなく、XMLファイル内で定義すべきです。
次に、レイアウト用XMLファイルを利用するように「Hello, World」アプリケーションを修正していきます。
Eclipseのパッケージエクスプローラーで、「/res/layout/」フォルダ内の「main.xml」ファイルを開きます。
(Graphical Layoutで開いた場合は、下部のmain.xmlタブをクリックしてXMLソースを表示させてください。)
以下の内容でXMLファイルを書き換え、ファイルを保存します。「res/values/」フォルダ内の「strings.xml」ファイルを開きます。
このファイルで、画面上にデフォルトで表示する文字列を定義する。
Eclipseを使用している場合、ADTプラグインは「hello」と「app_aname」という2このセッティングを用意してくれます。
(リソース画面が表示された場合は、下部の「string.xml」タブをクリックしてXMLを表示させてください)
「hello」を別の文字列「Hello, Android! I am a string resource!」に変更したXMLファイルを以下に示します。- 「HelloAndroid.java」を開きます。
以下のようにソースを修正してください。
<?xml version="1.0" encoding="utf-8"?><TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/textview"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:text="@string/hello"/>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="hello">Hello, Android! I am a string resource!</string>
<string name="app_name">Hello, Android</string>
</resources>
package com.example.helloandroid;import android.app.Activity;
import android.os.Bundle;public class HelloAndroid extends Activity {
/** Called when the activity is first created. */
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.main);
}
}
「setContentView()」メソッドにViewのオブジェクトを渡す代わりに、レイアウトリソースへの参照を渡しています。
コンパイラによって自動的に「/res/layout/main.xml」が読み込まれます。
「R.java」はEclipseプラグインによって自動生成されているはずです。
(※)「R.java」を手で修正する必要はありません。(詳細後述)
以上の修正が完了したら、アプリケーションを再実行してみましょう。
ヒント:Eclipseのショートカット「Ctrl + F11」 (Macの場合「Cmd + Shift + F11」) で、現在のアプリケーションを実行することができます。
(参考)「R.java」について
Eclipseでは、「gen」フォルダ配下に以下のようなR.javaのコードが自動生成されていると思います。
package com.example.helloandroid;public final class R {
public static final class attr {
}
public static final class drawable {
public static final int icon=0x7f020000;
}
public static final class id {
public static final int textview=0x7f050000;
}
public static final class layout {
public static final int main=0x7f030000;
}
public static final class string {
public static final int app_name=0x7f040001;
public static final int hello=0x7f040000;
}
}
「R.java」ファイルには、XMLで定義された全てのリソース情報が記述されています。
コードを作成する際に、R.javaを利用することで、リソースの定義内容を簡単に利用することができます。
Eclipse IDEの補完機能を合わせることで、非常に強力な開発環境となります。
「R.java」のソース自体を参照すると、16進数で定義されているため、実際のリソースの定義内容と異なるように見えると思います。
「/res」フォルダ配下に変更が入るたびに「R.java」ファイルは自動的に変更されます。
「R.java」ファイルを手で修正してはいけません。