是否可以在字符串值中包含占位符string.xml,可以在运行时分配值?
例:
一些字符串PLACEHOLDER1更多字符串
我想在strings.xml文件中引用另一个字符串中的字符串,如下所示(特别注意"message_text"字符串内容的结尾):
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="button_text">Add item</string>
<string name="message_text">You don't have any items yet! Add one by pressing the \'@string/button_text\' button.</string>
</resources>
Run Code Online (Sandbox Code Playgroud)
我已经尝试了上面的语法,然后文本打印出"@ string/button_text"作为明文.不是我想要的.我想要打印消息文本"你还没有任何项目!按"添加项目"按钮添加一个项目."
有没有任何已知的方法来实现我想要的?
RATIONALE:
我的应用程序有一个项目列表,但是当该列表为空时,我会显示"@android:id/empty"TextView.TextView中的文本是通知用户如何添加新项目.我想让我的布局变得傻瓜变化(是的,我是个傻瓜:-)
问题
我希望能够在Android XML代码中执行类似的操作:
<string name="title">@string/app_name test</string>
<string name="title2">@string/app_name @string/version_name</string>
Run Code Online (Sandbox Code Playgroud)
关于第一行代码编译器显示此错误
找不到与给定名称匹配的资源(在'title'处,值为'@ string/app_name test')
关于第二行代码编译器显示此错误
找不到与给定名称匹配的资源(在'title2'处,值为'@ string/app_name @ string/version_name')
问题
有人知道如何在Android XML中连接多个字符串吗?
基本原理
在许多代码位(在本例中为XML)中复制变量值是不好的做法.
我正在按照此解决方案在我的字符串资源文件中使用enetities:
是否可以直接在Android资源XML文件中进行字符串替换?
我在资源树中使用外部文件:/res/raw/entities.dtd,其内容:
<!ENTITY ent_devicename "MyDeviceName">
Run Code Online (Sandbox Code Playgroud)
在string.xml资源文件中:
<!DOCTYPE resources [
<!ENTITY % ent_devicename SYSTEM "../raw/entities.dtd">
%ent_devicename;
]>
<resources>
<string name="name">The name is &ent_devicename;</string>
</resources>
Run Code Online (Sandbox Code Playgroud)
但我得到这个错误:
实体"ent_devicename"已被引用,但未被声明.
如您所见,Android Studio可识别外部实体文件:
和实体:
有人能提供一个正确的例子来使事情有效吗?我的意思是一个完全可编译的Android Studio项目,在单独的文件中包含实体声明.
更新 好的,如果你更加关注这个w3schools链接:
https://www.w3schools.com/xml/xml_dtd_entities.asp
你看到了解决方案:
外部entities.dtd文件包含
<!ENTITY ent_devicename "MyDeviceName">
Run Code Online (Sandbox Code Playgroud)
那么新的字符串资源资源:
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
<!ENTITY ent_devicename SYSTEM "../raw/entities.dtd">
]>
<resources xmlns:tools="http://schemas.android.com/tools" tools:ignore="Typos">
<string name="ent_devicenamxxe2">&ent_devicename;</string>
Run Code Online (Sandbox Code Playgroud)
我改变了<!ENTITY % ent_devicename对<!ENTITY ent_devicename(不再%)我删除%ent_devicename;
现在它编译但是生成的APK似乎忽略了实体值(使用空字符串).所以问题没有解决!
让我知道!
xml dtd android-resources android-studio android-gradle-plugin
我正在尝试将静态"硬编码"字符串与strings.xml字符串数组项引用的字符串组合在一起.
目标是拥有一个动态指标列表,其中所有语言的数字都相同,但指标文本值可能会按语言更改,如下所示:
<string-array name="interval_labels">
<item>30 @string/second</item>
<item>1 @string/minute</item>
<item>5 @string/minute</item>
<item>10 @string/minute</item>
<item>15 @string/minute</item>
<item>30 @string/minute</item>
<item>60 @string/minute</item>
</string-array>
Run Code Online (Sandbox Code Playgroud)
现在,如果我在之前删除的数字@string/...引用,它工作得很好(如提到这里),但我不知道是否有检索引用的字符串,并将其拼接到"硬编码"的一个办法.