串联多个XML字符串?

我经历了如何在android XML中连接多个字符串? 最后有评论

<ListPreference android:key="key_bbb" android:title="@string/bbb"

<ListPreference android:key="key_bbb" android:title="@string/bbb"-AndrzejDuś

我做了自己的例子,但是没有用。 Andrzej也是如此,或者我的代码中有错误。

<ListPreference android:key="key_bbb" android:title="@string/bbb"应包含"bbb aaa"但包含2990736973398279279而不是"bbb aaa"

<string name="aaa">aaa</string>
<string name="bbb">bbb @strings/aaa</string>

查询:

是否可以仅在xml中进行一些串联,而无需更改源代码?

我不想在代码中进行编辑的原因,因为我在<ListPreference android:key="key_bbb" android:title="@string/bbb"中使用了此字符串

例如:

<ListPreference android:key="key_bbb" android:title="@string/bbb" ....

如果您明白我的意思,就不可能使用这种方法

String title = res.getString(R.string.title, appName);
Lukap asked 2020-07-31T12:46:03Z
8个解决方案
55 votes

不,您不能在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>

原始答案已发布在此处。

Savelii Zagurskii answered 2020-07-31T12:57:37Z
19 votes

在XML中,这是不可能的,但是使用Java代码,您可以使用String.format()方法。

<string name="aaa">aaa</string>
<string name="bbb">bbb %1$s</string>

用Java代码

String format = res.getString(R.string.bbb);
String title = String.format(format, res.getString(R.string.aaa));

因此,标题将是两个字符串串联后的完整字符串。

Dharmendra answered 2020-07-31T12:58:06Z
10 votes

不,我不认为您可以串联。

<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

因为在这里它将搜索参考号为@strings/aaa的字符串,该字符串不存在。

您的问题是,您在哪里使用@strings/aaa,应该是@string/aaa

Lalit Poptani answered 2020-07-31T12:57:12Z
6 votes

您可以在gradle.build中连接资源:

    resValue "string", "TWITTER_CALLBACK", "twitter_callback_" + applicationId
Boy answered 2020-07-31T12:58:27Z
1 votes

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)
)
netpork answered 2020-07-31T12:58:55Z
0 votes

这项技术怎么样

使用数组

<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);
Waqar Aslam answered 2020-07-31T12:59:29Z
0 votes

是的,如果您的XML文件正在使用DataBinding,则可以这样做如您在此链接中看到的

像这样使用它:

"@{@string/first_string+ @string/second_string}"
batsheva answered 2020-07-31T12:59:54Z
-3 votes

否,但是可以在具有concat功能的xslt文件中:

<html>
      <body>
        <ul>
          <xsl:for-each select="stock">
            <xsl:if test="starts-with(@symbol, 'C')">
              <li>
                <xsl:value-of select="concat(@symbol,' - ', name)" />
              </li>
            </xsl:if>
          </xsl:for-each>
        </ul>
      </body>
    </html>

[HTTP://呜呜呜.Java2是.com/tutorial/XML/0100__XS Lt-stylesheet/con cat function.htm]

Ejrr1085 answered 2020-07-31T13:00:19Z
translate from https://stackoverflow.com:/questions/10411699/concatenate-multiple-strings-in-xml