在XML中连接多个字符串?

Luk*_*kap 44 xml string android

我将详细介绍如何在android XML中连接多个字符串?最后有评论

For clarity, Its works:

<string name="title">@string/app_name</string>.- AndrzejDuś

我做了我自己的例子,但它不起作用.所以确实安杰错误或我做错了什么在我的代码.

R.strings.bbb应该包含"bbb aaa" 但不包含"bbb aaa""bbb @strings/aaa"

<string name="aaa">aaa</string>
<string name="bbb">bbb @strings/aaa</string>
Run Code Online (Sandbox Code Playgroud)

查询:

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

我不想在代码中编辑的原因,因为我使用了这个字符串 xml/preferences.xml

例如:

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

如果你知道我的意思,这里没有可能使用这样的东西

String title = res.getString(R.string.title, appName);
Run Code Online (Sandbox Code Playgroud)

Sav*_*kii 55

不,您不能在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>
Run Code Online (Sandbox Code Playgroud)

原来的答案发布在这里.


Dha*_*dra 19

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

<string name="aaa">aaa</string>
<string name="bbb">bbb %1$s</string>
Run Code Online (Sandbox Code Playgroud)

在java代码中

String format = res.getString(R.string.bbb);
String title = String.format(format, res.getString(R.string.aaa));
Run Code Online (Sandbox Code Playgroud)

因此,在连接两个字符串后,title将是一个完整的字符串.


Lal*_*ani 10

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

<string name="aaa">aaa</string>
<string name="bbb">bbb @string/aaa</string>
Run Code Online (Sandbox Code Playgroud)

输出 - bbb @ string/aaa

如果你这样做,

<string name="aaa">aaa</string>
<string name="bbb">@string/aaa bbb</string>  -> This won't work it
                                                      will give compilation error
Run Code Online (Sandbox Code Playgroud)

因为在这里它会搜索一个@string/aaa bbb不存在引用的String .

在你的情况下问题是,你@strings/aaa应该在哪里使用@string/aaa

  • 有关在xml文件中多次重用字符串的方法,请参阅Savelii Zagurskii的答案. (2认同)

Boy*_*Boy 6

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

    resValue "string", "TWITTER_CALLBACK", "twitter_callback_" + applicationId
Run Code Online (Sandbox Code Playgroud)