こんにちは!
今回はstrings.xmlを使い方やリットについて紹介します。
strings.xmlとは?
アプリ内で使用する文字列を定義するXMLファイルのこと
使い方
strings.xmlに文字列を定義
まずはres/values/strings.xmlに文字列を定義しましょう
<string name="hello_text">ようこそ、こんにちは</string>
Key-Value方式で定義します。
nameに定義した文字列がキーになります。
strings.xmlから文字列を取得
では、次は定義した文字列を実際に使用してみましょう
xmlファイルから取得する場合
例えばTextViewにstrings.xmlに定義した文字列を取得する場合は下記のように記述します。
android:text="@string/hello_text"
@string/xxx で stringタグで指定したキーを指定すると紐づいている文字列が取得できます。
Activity,Fragmentクラスから取得する場合
String text = getString(R.string.hello_text);
val text = getString(R.string.hello_text)
getStringメソッドの引数にR.string.xxx でstringタグで指定したキーを指定すると紐づいている文字列が取得できます。
Activity,Fragment以外のクラスから取得する場合
該当クラスにActivityやFragmentからContextを取得していれば文字列が取得できます。
String text = context.getString(R.string.hello_text);
val text = context.getString(R.string.hello_text)
contextがgetStringメソッドを保持しているので使用可能になります。
strings.xmlを使用するメリット
1. 文字列を一括管理できる
例えば、アプリ内のActivityやFragment、XMLで文字列をそれぞれ定義しようとします。
同じ文字列を100個使いたい場合それぞれのファイルで定義する必要があります。
ですが、strings.xmlを使用すると文字列を1つ定義して100箇所から参照するようにすればどうでしょうか?下記のメリットがあります。
- 一度文字列を定義すれば何度も文字列を入力しなくて良いのでtypo(打ち間違え)が発生しづらい
- 仕様変更等で文字列を変更しないといけなくなった場合はstrings.xmlで定義した文字列を変更するだけで済む(100箇所変更しなくていいですね)
2.多言語対応が楽々できる
strings.xmlを使用しなかった場合
ActivityやFragmentの文字列を使用している各所で
アプリの表示言語を取得して表示する文字列を判断する必要がある
すごい手間ですし、対応する言語が一つでも追加されれば各所に対応を入れる必要がある
strings.xmlを使用した場合
下記のようにそれぞれの言語に対応したstrings.xmlを作成します。
- res/values-ja/strings.xml(日本語)
- res/values-en/strings.xml(英語)
これだけで対応完了となります。
アプリの表示言語を自動的に判定して使用するstrings.xmlを決定します。
楽ちんですね。
最後に
いかがでしたでしょうか
特に理由がない場合はstrings.xmlに文字列を定義していると仕様変更や多言語対応時にすごい助かります。おすすめです!
それでは!
コメント