string.xml
実行時に値を割り当てることができる文字列値にプレースホルダーを含めることは可能ですか?
例:
いくつかの文字列PLACEHOLDER1いくつかの文字列
string.xml
実行時に値を割り当てることができる文字列値にプレースホルダーを含めることは可能ですか?
例:
いくつかの文字列PLACEHOLDER1いくつかの文字列
はい、文字列リソースから次を参照してください:フォーマットとスタイリング
を使用して文字列をフォーマットする必要がある場合は
String.format(String, Object...)
、フォーマット引数を文字列リソースに配置することでフォーマットできます。たとえば、次のリソースを使用します。<string name="welcome_messages">Hello, %1$s! You have %2$d new messages.</string>
この例では、フォーマット文字列には2つの引数があります。
%1$s
は文字列であり%2$d
、は10進数です。次のように、アプリケーションからの引数を使用して文字列をフォーマットできます。Resources res = getResources(); String text = String.format(res.getString(R.string.welcome_messages), username, mailCount);
getString
文字列をフォーマット文字列として使用するオーバーロードがあることに注意してください。
String text = res.getString(R.string.welcome_messages, username, mailCount);
複数形を処理する必要がある場合は、次を使用してください。
<plurals name="welcome_messages">
<item quantity="one">Hello, %1$s! You have a new message.</item>
<item quantity="other">Hello, %1$s! You have %2$d new messages.</item>
</plurals>
最初のmailCount
パラメータは、使用する形式(単一または複数)を決定するために使用され、他のパラメータは置換です。
Resources res = getResources();
String text = res.getQuantityString(R.plurals.welcome_messages, mailCount, username, mailCount);
詳細については、文字列リソース:複数形を参照してください。
Javaコードを使用せずに、実際のstrings.xmlファイルからパラメータを使用する場合:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
<!ENTITY appname "WhereDat">
<!ENTITY author "Oded">
]>
<resources>
<string name="app_name">&appname;</string>
<string name="description">The &appname; app was created by &author;</string>
</resources>
これはリソース ファイル全体では機能しません。つまり、変数は、それらを必要とする各 XML ファイルにコピーする必要があります。
同じものを探していて、最終的に次の非常に簡単な解決策を見つけました。ベスト: それは箱から出してすぐに動作します.
1. 文字列リソースを変更します。
<string name="welcome_messages">Hello, <xliff:g name="name">%s</xliff:g>! You have
<xliff:g name="count">%d</xliff:g> new messages.</string>
2. 文字列置換を使用します。
c.getString(R.string.welcome_messages,name,count);
ここで、c はコンテキスト、nameは文字列変数で、int 変数をカウントします
含める必要があります
<resources xmlns:xliff="http://schemas.android.com/apk/res-auto">
res/strings.xml で。私のために働きます。:)
Kotlin では、次のように文字列値を設定するだけです。
<string name="song_number_and_title">"%1$d ~ %2$s"</string>
レイアウトにテキスト ビューを作成します。
<TextView android:text="@string/song_number_and_title"/>
Anko を使用している場合は、コードで次のようにします。
val song = database.use { // get your song from the database }
song_number_and_title.setText(resources.getString(R.string.song_number_and_title, song.number, song.title))
アプリケーション コンテキストからリソースを取得する必要がある場合があります。
はい!Java/Kotlin コードを記述せずに、ビルド時に作成したこの小さなライブラリを使用して XML のみを記述できるため、アプリは影響を受けません: https://github.com/LikeTheSalad/android -文字列参照
使用法
あなたの文字列:
<resources>
<string name="app_name">My App Name</string>
<string name="template_welcome_message">Welcome to ${app_name}</string>
</resources>
ビルド後に生成された文字列:
<!--resolved.xml-->
<resources>
<string name="welcome_message">Welcome to My App Name</string>
</resources>
res/values/string.xml 内
<resources>
<string name="app_name">Hello World</string>
<string name="my_application">Application name: %s, package name: %s</string>
</resources>
Javaコードで
String[] args = new String[2];
args[0] = context.getString(R.string.app_name);
args[1] = context.getPackageName();
String textMessage = context.getString(R.string.my_application,(Object[]) args);