#AndroidStudioで画面表示に使用する文字を登録
新規アプリケーションの作成で空のアクティビティを選んでから
activity_main.xmlにボタンを追加します。
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
tools:context=".MainActivity">
<TextView
android:id="@+id/tvMain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintLeft_toLeftOf="parent"
app:layout_constraintRight_toRightOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<Button
android:id="@+id/btMain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="Button"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
</androidx.constraintlayout.widget.ConstraintLayout>
この時点でコンポーネントツリーに警告が出ている。
表示内容が英語なのだが要はボタンに表示する文字 Button は、ここじゃなくて@stringリソースに書いてねということらしい。
##文字列の登録
ということで@stringリソースに書いてみよう。
プロジェクトのツリーから
app -> res -> values -> strings.xml
strings.xmlが@stringリソースになるので開くと
<resources>
<string name="app_name">[[アプリケーションのタイトル]]</string>
</resources>
となっている。
このままだと日本語使用するとき問題になるので先頭に****を追加する。
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<string name="app_name">[[アプリケーションのタイトル]]</string>
</resources>
次にボタンに表示する名称を登録します。
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<string name="app_name">[[アプリケーションのタイトル]]</string>
<string name="btName">これはボタンです</string>
</resources>
今度はレイアウトのactivity_main.xmlを開いて
省略
<Button
android:id="@+id/btMain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
android:text="@string/btName"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
**android:text=**の後ろの部分を @string/btName に変更します。
これで警告は消えてボタンの名称は指定したとおりの表示になります。
TextViewのtextではなぜか警告が出ませんが、同じようにこちらも直しておきましょう。
##文字列リストの登録
文字列だけでなく文字列リスト(配列)も登録出来ます。
<?xml version="1.0" encoding="utf-8" ?>
<resources>
<string name="app_name">[[アプリケーションタイトル]]</string>
<string-array name="lvEntries">
<item>1個目</item>
<item>2個目</item>
<item>3個目</item>
</string-array>
</resources>
これで文字列リスト lvEntriesが完成しました。
次に画面レイアウトactivity_main.xmlの方はボタンを消してListViewを追加します。
省略
<ListView
android:id="@+id/lvMain"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginTop="8dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
android:entries="@array/lvEntries"/>
ListViewのandroid:entriesに @array/lvEntries を指定することで文字列リストがListViewに読み込まれます。
##string.xmlに書く理由
直接レイアウトファイルのactivity_main.xmlに書いても良いように思いますが、あえてstrings.xmlに書いて参照させるようにしているのは他の国の言語に変換しやすくする為なのでしょう。
複数のファイルの様々な場所に書かれている表示要素を修正するよりはstrings.xmlだけを修正する方が早いですからね。
**でも表示する文字ってプログラムからの変更したりするのでは?**っていうことでプログラムからも参照してみましょう。
val btnName = R.string.btName
val lvEntries = R.array.lvEntrys
急にRが出てきましたがこれはリソースを参照するときの決まり文句です。
このようにすれば表示に関係する文字列を登録しておけば将来的に楽になるはずです。
上記ではリソースIDしか取得出来ないのでそれを元に実際の値を参照するには
val btnName = resources.getString(R.string.btName)
val lvEntries = resources.getStringArray(R.array.lvEntrys)
このようになります。
##最後に
行き当たりばったりで作る場合はいちいち使う文字列を登録していられません。
登録しても使わない場合があると思います。
どう使っていくのかはわかりませんが、まずは直に文字を書いても仕方が無い世界なのかもしれません。落ち着いてから登録している文字を採用するように変換すると楽なのかも知れません。
そう言っておいて後回しにしそうですね。