web-dev-qa-db-ja.com

XMLで複数の文字列を連結しますか?

私はこれを通ります 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);
42
Lukap

いいえ、連結できるとは思いません。

<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でした

10
Lalit Poptani

いいえ、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

53

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つの文字列を連結した後の完全な文字列になります。

19
Dharmendra

Gradle.buildのリソースを連結できます。

    resValue "string", "Twitter_CALLBACK", "Twitter_callback_" + applicationId
6
Boy

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

はい、XMLファイルでDataBindingを使用している場合は、このようにできます link

次のように使用します。

"@{@string/first_string+ @string/second_string}"
0
batsheva

このテクニックはどうですか

配列を使用する

<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);
0
Waqar Aslam