Home> Tutorial > Hello, World > 『Hello, World』チュートリアル(6/8)

『Hello, World』チュートリアル(6/8)

ユーザインタフェースの更新

「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:androidAndroid名前空間で定義されている共通属性を参照するために、XMLの名前空間を宣言しています。Android用のレイアウトを定義する際には、最初に定義しなければなりません。
android:idTextView要素を特定するための属性です。このIDを利用して、ソースコードや他の資源定義用XMLからこのViewにアクセスすることができます。
android:layout_widthViewが画面上の幅をどの程度使用するのか定義します。上記例の場合、ただ一つのViewしか存在しないので、「fill_parent」を指定してスクリーン全体を利用するように定義しています。
android:layout_height Viewが画面上の高さをどの程度使用するのか定義します。
android:textTextView上で表示させる文字列を定義します。上記例の場合、文字列をそのまま定義するのではなく、文字列リソースで定義された文字列を定義しています。実際の文字列は文字列リソースファイル「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」アプリケーションを修正していきます。

  1. Eclipseのパッケージエクスプローラーで、「/res/layout/」フォルダ内の「main.xml」ファイルを開きます。
    (Graphical Layoutで開いた場合は、下部のmain.xmlタブをクリックしてXMLソースを表示させてください。)
    以下の内容でXMLファイルを書き換え、ファイルを保存します。

  2. <?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"/>


  3. 「res/values/」フォルダ内の「strings.xml」ファイルを開きます。
    このファイルで、画面上にデフォルトで表示する文字列を定義する。
    Eclipseを使用している場合、ADTプラグインは「hello」と「app_aname」という2このセッティングを用意してくれます。
    (リソース画面が表示された場合は、下部の「string.xml」タブをクリックしてXMLを表示させてください)
    「hello」を別の文字列「Hello, Android! I am a string resource!」に変更したXMLファイルを以下に示します。



  4. <?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>

  5. 「HelloAndroid.java」を開きます。
    以下のようにソースを修正してください。


  6. 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」) で、現在のアプリケーションを実行することができます。

hello_android_4.png

(参考)「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」ファイルを手で修正してはいけません。

Next
Back
Index

Return to page top