私はこれを通ります Android XML? で複数の文字列を連結する方法)==そして最後にコメントがあります
For clarity, Its works:
<string name="title">@string/app_name</string>.
–AndrzejDuś
独自の例を作成しましたが、機能しません。 Andrzejも間違っていますか、コードで何か間違っています。
R.strings.bbb
には"bbb aaa"
が含まれている必要がありますが、"bbb aaa"
の代わりに"bbb @strings/aaa"
が含まれています
<string name="aaa">aaa</string>
<string name="bbb">bbb @strings/aaa</string>
クエリ:
ソースコードを変更せずに、xmlのみで連結を行うことは可能ですか?
xml/preferences.xml
でこの文字列を使用しているため、コードで編集したくない理由
例:
<ListPreference Android:key="key_bbb" Android:title="@string/bbb"
....
あなたが私の言いたいことを知っているなら、ここではこのようなものを使用する可能性はありません
String title = res.getString(R.string.title, appName);
いいえ、連結できるとは思いません。
<string name="aaa">aaa</string>
<string name="bbb">bbb @string/aaa</string>
出力-bbb @ string/aaa
もしあなたがそうするなら、
<string name="aaa">aaa</string>
<string name="bbb">@string/aaa bbb</string> -> This won't work it
will give compilation error
ここでは、存在しない参照@string/aaa bbb
を持つ文字列を検索するためです。
あなたの場合の問題は、@strings/aaa
を使用する必要がある@string/aaa
でした
いいえ、XMLで文字列を連結することはできませんが、XMLリソースを定義することはできます。
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
<!ENTITY appname "MyAppName">
<!ENTITY author "MrGreen">
]>
<resources>
<string name="app_name">&appname;</string>
<string name="description">The &appname; app was created by &author;</string>
</resources>
元の回答が投稿されました here 。
XMLでのみこれは不可能ですが、Javaコードを使用すると、String.format()
メソッドを使用できます。
<string name="aaa">aaa</string>
<string name="bbb">bbb %1$s</string>
In Java code
String format = res.getString(R.string.bbb);
String title = String.format(format, res.getString(R.string.aaa));
したがって、タイトルは2つの文字列を連結した後の完全な文字列になります。
Gradle.buildのリソースを連結できます。
resValue "string", "Twitter_CALLBACK", "Twitter_callback_" + applicationId
Kotlinバージョン:
xmlの文字列:
<string name="school_girl">Gogo Yubari</string>
<string name="assistant">Sofie Fatale</string>
<string name="boss">O-Ren Ishii</string>
<string name="list">%s, %s, %s</string>
そして、コードで:
val killBillV1 = getString(R.string.list).format(
Locale.US,
getString(R.string.school_girl),
getString(R.string.assistant),
getString(R.string.boss)
)
はい、XMLファイルでDataBindingを使用している場合は、このようにできます link
次のように使用します。
"@{@string/first_string+ @string/second_string}"
このテクニックはどうですか
配列を使用する
<string name="app_link">https://myapp.com/</string>
<array name="update_dialog_msg">
<item>Update can be downloaded manually by visiting this link:\n</item>
<item>@string/app_link</item>
</array>
そして、以下のようにJavaクラスでメソッドを作成します
public String getStringArray(int resStringArray)
{
String str = "";
String[] strArray = mContext.getResources().getStringArray(resStringArray);
for (String s: strArray)
{
str += s;
}
return str;
}
ここで、任意のJavaクラスから
mDialog.setMessage(getStringArray(R.array.update_dialog_msg);
// OR
textView.setText(getStringArray(R.array.update_dialog_msg);