60

我通过这个如何在 android XML 中连接多个字符串?最后有评论说

For clarity, Its works:

<string name="title">@string/app_name</string>.——安德烈·杜斯

我做了我自己的例子,但它不起作用。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);
4

11 回答 11

73

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

原来的答案张贴在这里

于 2015-10-21T07:02:49.043 回答
20

仅在 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));

所以标题在两个字符串连接后将是一个完整的字符串。

于 2012-05-02T10:42:22.363 回答
16

不,我不认为你可以连接。

<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

于 2012-05-02T10:26:45.077 回答
9

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

    resValue "string", "TWITTER_CALLBACK", "twitter_callback_" + applicationId
于 2016-11-10T12:12:52.473 回答
5

是的,如果您的 XML 文件使用 DataBinding,您可以这样做,如您在此链接中所见

像这样使用它:

"@{@string/first_string+ @string/second_string}"
于 2019-05-13T11:16:49.250 回答
1

科特林版本:

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)
)
于 2018-08-02T11:35:17.787 回答
1

是的,您可以这样做,而无需添加任何 Java/Kotlin 代码,只需使用此库:https ://github.com/LikeTheSalad/android-string-reference ,它在构建时执行此操作。

对于您的情况,您必须像这样设置字符串:

<string name="aaa">Some text</string>
<string name="template_bbb">bbb ${aaa}</string>

然后库将在构建时创建以下内容:

<string name="bbb">bbb Some text</string>

免责声明:我是这个库的作者。

于 2019-10-25T12:09:31.887 回答
0

这个技术怎么样

使用数组

<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);
于 2018-01-29T02:15:02.060 回答
0

嗨 concat 可以这样做,

   android:text="@{userInfo.firstName.concat(@string/empty_str).concat(userInfo.lastName)}"
         

我猜它是动态数据的好样本。但如果此示例包含其他变体。例如用户名:Jon Doe

  android:text="@{String.format(@string/user_def,userInfo.firstName.concat(@string/empty_str).concat(userInfo.lastName))"
          

就是这样

于 2021-04-08T21:32:20.400 回答
0

如果要添加多个字符串值,请尝试这样

                        <TextView
                        ..........
                        android:text='@{String.format("%s %s","+91", userInfo.mobile)}'
                        .............. />
于 2021-08-25T10:08:07.613 回答
-3

不,但可以在带有 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://www.java2s.com/Tutorial/XML/0100__XSLT-stylesheet/concatfunction.htm

于 2016-10-06T21:20:16.493 回答