以下Android StudioでKotlinを使用した開発を想定. Rクラスの生成場所を除けばJavaでも同じはず.
実行環境
項目 | 値 |
---|---|
OS | Windows11 |
Android Studio | Electric Eel 2022.1.1 |
開発言語 | Kotlin |
リソースの定義方法
リソース名とキーについて、以下のことは覚えていきたい.
- フォルダ名はあらかじめ定められたものを使わなければならない.
- (拡張子以外)ファイル名は任意でキーとして使われる.
- 一部のリソースはファイル名ではなくname属性値がキーとして使われる.
フォルダ名
フォルダ名はあらかじめ決められたものでなくてはならない. 仮にresフォルダ以下に適当な名前でフォルダを作成すると、エスクプローラー上はフォルダが作成されるがProjectツールウインドウには表示されない. 逆に、エクスプローラー上でmenuフォルダを作成するとProjectツールウインドウにフォルダが表示される(そんなことしてもメリットがないが).
ファイル名
フォルダ名とは対照的に、リソースファイルのファイル名は拡張子を除いて任意につけることが出来る. なんなら、異なるリソースフォルダであれば同名のファイルが存在しても問題ない.
ただし、各フォルダに対して決まったタグしか定義できない模様.
キーの付け方と参照方法
基本的にxml内では@tag_name/key、Kotlin内ではR.tag_name.keyという名前で参照する. ただし文字列配列のように一部タグ名とは違う名前で参照するリソースもある.
リソースの種類 | 保存フォルダ | キー | 参照方法(xml) | 参照方法(Kotlin) |
---|---|---|---|---|
プロパティアニメーション | res/animator | ファイル名 | @animator/filename | R.animator.filename |
トゥイーンアニメーション | res/anim | ファイル名 | @anim/filename | R.anim.filename |
フレームアニメーション | res/drawable | ファイル名 | @drawable/filename | R.drawable.filename |
色状態リスト | res/color | ファイル名 | @color/filename | R.color.filename |
ドローアブル | res/drawable | ファイル名 | @drawable/filename | R.drawable.filename |
レイアウト | res/layout | ファイル名 | @layout/filename | R.layout.filename |
メニュー | res/menu | ファイル名 | @menu/filename | R.menu.filename |
文字列 | res/values | name属性値 | @string/string_name | R.string.string_name |
文字列配列 | res/values | name属性値 | @array/string_array_name | R.array.string_array_name |
スタイル | res/values | name属性値 | @style/style_name | R.style.style_name |
フォント | res/font | ファイル名 | @font/filename | R.font.filename |
ブール値 | res/values | name属性値 | @bool/bool_name | R.bool.bool_name |
色 | res/values | name属性値 | @color/color_name | R.color.color_name |
ディメンション | res/values | name属性値 | @dimen/dimension_name | R.dimen.dimension_name |
ID | res/values | name属性値 | @id/name | R.id.name |
整数 | res/values | name属性値 | @integer/integer_name | R.integer.integer_name |
name属性は自由に値をつけることが出来るが、一部予約された値がある. 例えば、プロジェクト作成時に自動生成されるres/values/strings.xmlでアプリ名を指定している.
@+idのつかいどころ
前述のように、layoutファイルやmenuファイルなどはファイル名がキーになる. 一方、/res/values内のファイルに書かれたリソースはその一つ一つにname属性をつけることが出来る. ということは、前者はファイルに書かれた要素をルート要素から参照するのに対し、後者はピンポイントで要素を参照する. だが、layoutやmenu内の要素にリスナを登録する時などはピンポイントで要素を参照したいこともある. そういう時は要素にファイル名でもname属性でもないキーを登録できると便利である. こういう時は@+idをつかって個別にキーをつけるとよい.
Rクラス
ビルド時にRクラスというリソース管理用のクラスが自動生成され、その中の定数という形でリソースは管理される. Java版の場合このRクラスを直で見ることが出来るっぽいが、Kotlinの場合R.txtとして生成されるらしい.
ビルド後にProjectツールウインドウから/app/build/intermediates/runtime_symbol_list/debug/R.txtを選択すると整数の値が表示される.
文字列の書式設定
文字列リソースは書式を設定することが出来る. 下の例の場合、%1$sが文字列、%2$dが10進数の整数のプレースホルダーになっている.
<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
var text = getString(R.string.welcome_messages, username, mailCount)