Android: strings.xmlのまとめ

res/values/strings.xmlは, 文字列関連のリソースを管理するファイルです. 文字列をプログラム外で定義することで, 多国語の対応, デバッグブルドの時にサーバのURLを変更する等が, コードをいじらずに容易に行えます.

また, 意外といろいろな機能があったので, 紹介したいと思います.

基本的な使い方

<string name="app_name">Application</string>

のように記述して使います. アプリケーション側では, 下のように取得します.

getString(R.string.app_name);

or

context.getString(R.string.app_name);

特に, 説明はいらないと思います.

arrayの定義

strings.xmlでは単純なkey-valueだけでなく, arrayも定義することができます.

string-array要素で定義してあげます.

<string-array name="sports">
    <item>マラソン</item>
    <item>野球</item>
    <item>サッカー</item>
    <item>卓球</item>
</string-array>

アプリケーション側では下のように取得します.

getResources().getStringArray(R.array.sports)

or

context.getResources().getStringArray(R.array.sports)

Contextから直接取得することが出来ないので, 一旦Resourcesを取得し, そこからarrayを取り出します.

値展開

strings.xmlでは, 文字列展開することが出来ます. printf formatのように使います.

<!-- %1: 引数1, $d: 数字 -->
<string name="hoge">Hello %1$d</string>
<!-- %1: 引数1, %2: 引数2, $s: 文字列 -->
<string name="hogestr">%1$s %2$d %1$s</string>

アプリケーション側では, 下のように指定します.

getString(R.string.hoge, 100)); // Hello 100
getString(R.string.hogestr, "value", 100)); // value 100 value

%1$s は「第1引数の文字列」をここに展開しろ. %2$dは「第2引数の数字」をここに展開しろ. という意味になります

plurals

あまり使ったことはないですが, pluralsという要素があります.

これは, quantity stringsと呼ばれ, 数字(量)の大きさに応じて, 文字列を変化させることが出来ます. switch分岐が出来るイメージです.

下のように記述します.

<plurals name="number">
    <item quantity="one">one</item>
    <item quantity="other">other %1$d</item>
</plurals>

quantityには, zero, one, two, few, many, otherが指定できます.

アプリケーション側の記述です.

getResources().getQuantityString(R.plurals.number, 1, 1)); // one
getResources().getQuantityString(R.plurals.number, 10, 100)); // other 100

第二引数にquantityに与える数字を指定します. 1ならone, 0ならzeroがそれぞれ対応します. 複数形の場合に文字列を変えたいときなどに有効です.

まとめ

strings.xmlには, 意外といろいろな機能がありました. switch的な処理が書けるpluralsは頭の片隅に入れておくと良さそう.

参考

Written by