585

string.xml実行時に値を割り当てることができる文字列値にプレースホルダーを含めることは可能ですか?

例:

いくつかの文字列PLACEHOLDER1いくつかの文字列

4

14 に答える 14

1179

フォーマットとスタイリング

はい、文字列リソースから次を参照してください:フォーマットとスタイリング

を使用して文字列をフォーマットする必要がある場合は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);

詳細については、文字列リソース:複数形を参照してください。

于 2010-09-07T07:01:34.260 に答える
135

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 ファイルにコピーする必要があります。

于 2014-07-23T06:12:44.107 に答える
20

同じものを探していて、最終的に次の非常に簡単な解決策を見つけました。ベスト: それは箱から出してすぐに動作します.
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 で。私のために働きます。:)

于 2015-06-05T13:16:46.657 に答える
5

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))  

アプリケーション コンテキストからリソースを取得する必要がある場合があります。

于 2017-10-10T19:11:42.953 に答える
2
于 2012-04-09T23:22:30.900 に答える
1

はい!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>
于 2019-11-07T10:17:32.843 に答える
1

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);
于 2018-07-17T08:12:37.393 に答える