XMLに分離されたStringの利用
今までXMLファイルを利用してきましたが、実はほとんど触れていないXMLが残っているのに気がついたでしょうか。それは、「string.xml」です。これは、文字通り「テキスト情報を定義したXML」なのです。テキストをXMLファイルに切り離すことで、後から表示テキストの修正などを容易に行えるようにしているのですね。
そのためには、XMLファイルから自由にテキスト情報を取り出せなければいけません。では、実際にstring.xmlにテキストを追加して、利用してみましょう。string.xmlを開いてみてください。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">MyAndy</string>
</resources>
こんなものが書かれているはずですね。これは、app_nameという名前で「MyAndy」というテキストを登録しているのです。これは、アプリケーション名として利用されます。では、これにテキスト情報を追加してみましょう。
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">MyAndy</string>
<string name="txt_value">これはXMLから取得したテキストです。</string>
</resources>
テキスト情報は、<resources>タグの中に記述をします。これは<string>タグの中にname属性を使って名前をつけ、終了タグとの間にテキストを記述します。ここでは、txt_valueという名前でテキストを追加しました。
では、ボタンをクリックしたら、これを読み込んでTextViewに表示させてみましょう。MyAndyに用意したMyClickAdapterクラスを以下のように修正します。
class MyClickAdapter implements OnClickListener {
@Override
public void onClick(View v) {
if (v == main_btn) {
text.setText(R.string.txt_value);
}
}
}
ボタンをクリックすると、XMLからtxt_valueのテキストを取り出してTextViewに設定する。 |
見ればわかるように、行っているのは非常に単純な作業です。setTextで、R.string.txt_valueを設定しているだけです。これは、Rクラスの中に生成されているstring内部クラスのフィールドです。
public static final class string {
public static final int app_name=0x7f040000;
public static final int txt_value=0x7f040001;
}
Rクラスには、このような内部クラスが生成されています。このtxt_valueを指定することで、string.xmlのtxt_valueの値が読み込まれ利用されていたのですね。
ここまでいくつか作成したサンプルを見てもわかるように、androidでは、XMLの情報、Rクラス、そしてJavaのソースコードが密接に連携して動いています。これらの関係をしっかり理解することが、androidアプリを扱うための近道といってよいでしょう。