我经历了这个How to concatenate multiple strings in 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);
答案 0 :(得分:50)
不,你不能在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。
答案 1 :(得分:18)
在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));
因此,在连接两个字符串之后,title将是一个完整的字符串。
答案 2 :(得分:9)
不,我认为你不能连接。
<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
答案 3 :(得分:6)
您可以在gradle.build中连接资源:
resValue "string", "TWITTER_CALLBACK", "twitter_callback_" + applicationId
答案 4 :(得分: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)
)
答案 5 :(得分: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);
答案 6 :(得分:0)
是的,如果您的XML文件正在使用DataBinding,则可以这样做 如您在此link
中所见像这样使用它:
"@{@string/first_string+ @string/second_string}"
答案 7 :(得分:0)
是的,您可以通过使用以下库来https://github.com/LikeTheSalad/android-string-reference,而不必添加任何Java / Kotlin代码(仅XML)即可。
对于您的情况,您必须像这样设置字符串:
<string name="aaa">Some text</string>
<string name="template_bbb">bbb ${aaa}</string>
然后该库将在构建时创建以下内容:
<string name="bbb">bbb Some text</string>
免责声明:我是这个图书馆的作者。
答案 8 :(得分: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))"
就这样
答案 9 :(得分:-1)
是的,这是完成此操作的完整方法。 使用数据绑定。
<?xml version="1.0" encoding="utf-8"?>
<layout xmlns:android="http://schemas.android.com/apk/res/android">
<TextView
android:id="@+id/tv_one_month_price"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginBottom="16dp"
android:text="@{@string/string1 + @string/string2}"
/>
</layout>
您可以在这里简单地在strings.xml文件中定义字符串。
<string name="string1">string1 text</string>
<string name="string2">string2 text</string>
很明显,您必须启用数据绑定,这是相同的链接。 https://developer.android.com/topic/libraries/data-binding/start
答案 10 :(得分:-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