カテゴリー:
Compose を用いた Android アプリ開発の基礎 / ユニット 1: 初めての Android アプリ
閲覧数:6 配信日:2024-11-05 10:25
アプリを作成する際には、どこかの時点で別の言語に翻訳される可能性があることを知っておいてください。前の Codelab で学んだように、String というデータ型は "Happy Birthday Sam!" のような文字の並びです。
「ハードコード」された文字列とは、アプリのコードに直接書き込まれた文字列です。ハードコードされた文字列を使用すると、アプリを他の言語に翻訳するのが難しくなり、アプリの文字列を別の場所で再利用するのが難しくなります。この問題は、文字列をリソース ファイルに抽出することで解決できます。具体的には、文字列をコード内にハードコードする代わりに別のファイルに格納して、文字列リソースに名前を付けます。文字列を使用するときには、この名前を使用するようにします。文字列を変更したり、他の言語に翻訳したりしても、名前は変わりません。
1.MainActivity.kt ファイルで、onCreate() 関数までスクロールします。誕生日祝いのメッセージ(Happy Birthday Sam! 文字列、引用符なし)を選択します。
2.画面左側の電球アイコンをクリックします。
3.[Extract string resource] を選択します。
Android Studio で [Extract Resource] ダイアログが開きます。このダイアログでは、文字列リソースの名前と保存方法の詳細をカスタマイズできます。[Resource name] フィールドには、文字列の名前を入力します。[Resource value] には、実際の文字列を入力します。
4.[Extract Resource] ダイアログで、[Resource name] を happy_birthday_text に変更します。
文字列リソースの名前には小文字を使用し、複数の単語はアンダースコアで区切るようにします。他の設定はデフォルトのままにします。
5.[OK] をクリックします。
6.コードの変更点を確認しましょう。
ハードコードされた文字列が getString() 関数の呼び出しに置き換えられています。
GreetingImage(
message = getString(R.string.happy_birthday_text),
from = "From Emma",
modifier = Modifier.padding(8.dp)
)
注: 一部の Android Studio バージョンでは、ハードコードされた文字列は getString() 関数に置き換えられます。このような場合は、手動で関数を stringResource() に変更してください。
必要に応じて、import androidx.compose.ui.res.stringResource を import セクションに追加します。
必要に応じて、import androidx.compose.ui.res.stringResource を import セクションに追加します。
7.[Project] ペインでパス app > res > values > strings.xml の strings.xml ファイルを開くと、happy_birthday_text という文字列リソースが Android Studio により作成されたのがわかります。
<resources>
<string name="app_name">Happy Birthday</string>
<string name="happy_birthday_text">Happy Birthday Sam!</string>
</resources>
strings.xml ファイルには、アプリによってユーザーに表示される文字列のリストが入っています。アプリの名前も文字列リソースです。文字列をすべて 1 か所にまとめることで、アプリ内のテキストの翻訳が簡単になり、アプリの別の場所で文字列を再利用するのも簡単になります。
8.同じ手順で署名である Text コンポーザブルのテキストを抽出しますが、今度は [Resource name] フィールドに signature_text を入力します。
完成したファイルは以下のようになります。
<resources>
<string name="app_name">Happy Birthday</string>
<string name="happy_birthday_text">Happy Birthday Sam!</string>
<string name="signature_text">From Emma</string>
</resources>
9.stringResource() と抽出された文字列を使用するように BirthdayCardPreview() を更新します。
@Preview(showBackground = true)
@Composable
fun BirthdayCardPreview() {
HappyBirthdayTheme {
GreetingImage(
message = stringResource(R.string.happy_birthday_text),
from = stringResource(R.string.signature_text)
)
}
}
注: Android Studio でstringResource にカーソルを合わせると、[Unresolved reference: stringResource] という警告メッセージが表示される場合は、stringResource() 関数を使用するために androidx.compose.ui.res.stringResource の import ステートメントを追加する必要があります。
10.アプリをもう一度実行し、変わらず動作していることを確認します。
「cluan project」では何も変わらずエラー
Invalidate Caches / Restartで期待した通り動作した
Android Studioのキャッシュが原因でエラーが発生した場合には、キャッシュエラーと表示させたい | 「Compose を用いた Android アプリ開発の基礎」カテゴリー | Kotlin 0
このエラーは、Kotlinのコンパイルデーモンに接続できないことが原因 | 「環境構築」カテゴリー | Kotlin 1