アプリを作成していると、オブジェクトの名前やデータの送信先アドレスなど、コード上で文字列を使う機会があると思います。
今回はそれらの文字列をリソースファイルで一元管理し、作業量と記述ミスを減らす方法を紹介します。
リソースファイルの用意
使う文字列はリソースファイルであるstrings.xmlに記述します。
strings.xmlは以下の場所にあります。
/app/src/main/res/values/strings.xml
ここに次のように記述します。
<string name="リソースID">呼び出す文字列</string>
stringタグで囲った文字が呼び出す文字列です。
nameは文字列を呼び出す際のリソースIDとして使われます。
今回は以下の内容を記述しました。
4〜11行の内容が追記したものです。
Javaのコードから呼ぶ
Javaのコードから呼ぶ場合は、下記のように、getStringを使ってString型の文字列を取得します。
getString(R.string.リソースID)
getString(R.string.リソースID,置換する文字1,置換する文字2,...)
getText(R.string.リソースID)
サンプルコード全体は、下記のようになってます。
コードの18行目ではstrings.xmlから文字を受け取った際に文字の置換をしています。
今回の場合はstrings.xmlの5行目の%1$sを”りんご”、%2$dを3に置換しています。
<string name="sample2">%1$sが%2$d個ある</string>
この行にある1$と2$の番号は、getStringの2番目以降の引数を何番目に当てはめるかを指定しています。
またsは文字列、dは数値を置換する際の型として指定しています。
もし置換する文字が一つだけの場合、数字の部分を省いて%dなどとも書くことができます。
レイアウトファイルから呼ぶ
レイアウトのxmlから呼び出す場合は次のように記述します。
android:text="@string/リソースID"
この呼び出し方だと、strings.xmlに書いたマークアップの設定が反映されます。
今回の例では、strings.xmlの8行目で文字列を<u>と</u>で囲んでありますが、これがHTMLとして解釈されて下線が引かれます。
<string name="sample4"><u>HTMLマークアップ</u>が使えます</string>
ただし、サポートされているHTML要素は下記の3つだけです。
- <u>:下線
- <b>:太字
- <i>:斜体
なお、Javaのコードからでも、TextViewのsetTextなどで文字列を渡す時にgetTextを使うとマークアップが反映されます。MainActivity.javaの31行目辺りを参照してください。34〜66行にあるTextView内で呼び出しています。
実行結果
これらのコードを端末で動かしてみると、次のようになります。
どんな時に役立つか
今回、画面下に早口言葉を載せてみました。
もしこの言葉をすべて別の言葉に修正するとしましょう。
この問題を修正しようとした場合、まずこのコードが記述されている場所を探さなければなりません。
また、もし複数のレイアウトに同じ内容の記述がある場合はその数だけ修正箇所が増えてしまうため、記述ミスをしてしまう可能性が増えます。
しかし今回のように文字列をファイルにまとめてあると、strings.xmlの12行目を書き換えるだけで簡単に修正することができます。
このように、リソースファイルに文字列をまとめておくと後から変更があった場合に楽に修正することができます。
サンプルプロジェクト
開発環境はAndroid Studio3.0.1です。
参考
エンジニア1年目です。
日々勉強したことをまとめていきたいと思います。