Android アプリケーション開発 strings.xmlについて 【Android TIPS】
前回はactivity_main.xmlについて紹介しました。
今回はresフォルダ以下のstrings.xmlの修正を通して、Androidアプリケーションにおける文字列の扱い方について確認していきます。
「Hello world!」を「Nice to meet you!」に変更してみる
HelloWorldプログラムで画面に表示されている文字「Hello world!」は、res/valuesフォルダ以下に格納されているstrings.xmlで定義されています。
覗いてみましょう。
1. プロジェクト・エクスプローラー上の「res/values/strings.xml」をダブルクリックして開きます。
2. 「hello_world (String)」をクリックします。
右側に表示されてる「value」に設定されている値が表示されている文字と同じですね。
3. テキストボックスの中の値を「Nice to meet you!」に変更します。
変更が終わったら、「ctrl + S」あるいは、右上のフロッピーディスクアイコンで上書き保存します。
4. プロジェクト名「HelloWorld」を右クリックし、実行→Android アプリケーションをクリックして、実行します。
エミュレータが起動している方は、そのエミュレータ上で新しいアプリケーションが実行されます。
エミュレータを起動していない方は起動を促すダイアログが表示されますので、画面の指示に従ってください。
5. 変更できました。
なぜstrings.xmlを変更すると表示される文字が変わるのか?
strings.xmlとHelloWorldアプリケーションの画面が連動していることはわかりました。
では、なぜstrings.xmlを変更すると表示される文字が変わるのでしょうか?
それは、画面レイアウトファイルactivity_main.xmlが、文字列リソースファイルstrings.xmlで定義している文字列を参照しているからです。
確認してみましょう。activity_main.xmlをダブルクリックします。
下図①をクリックし、右側のpropertiesを少し下にスライドさせると②のようにTextという欄が現れます。
設定されている値は下のようになっています。
@string/hello_world
この値が表わす意味は以下のようになります。
@ | リソースファイルを参照する |
string | R.stringクラスを参照する |
hello_world | hello_world定数を参照する |
続いて、R.javaを覗いてみましょう。
package com.example.helloworld; public final class R { // 省略 public static final class string { public static final int app_name=0x7f050000; public static final int hello_world=0x7f050001; public static final int menu_settings=0x7f050002; public static final int title_activity_main=0x7f050003; } // 省略 }
なるほど、たしかにhello_world定数が定義されています。
ここで、再度strings.xmlを振り返ってみましょう。
「Nice to meet you!」が設定されていた文字列は、「Name 」が「hello_world」となっていました。
「hello_world」という値がIDとなって参照されていることがわかります。
画面レイアウトファイルと同じように、文字列リソースファイルもADTによって自動的にコンパイルされ、Rクラス内に定数が作成されるわけですね。
以上をまとめるとこのようになります。
- MainActivity.javaからactivity_main.xmlを参照している。(setContentView()メソッドを使用して)
- activity_main.xmlからstringx.xmlを参照している。(@string/xxxxxという記述を使用して)
最後に
今回は、文字列リソースファイルである「strings.xml」を紹介しました。
実は文字列リソースファイルにはもう一つ便利な機能、アプリケーションの「多言語対応」があります。
次回は引き続きstrings.xmlになりますが、多言語対応について紹介する予定です。