我想从我的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>
我已经尝试了上面的语法,但然后文本打印出“@string/button_text”作为明文。不是我想要的。我希望消息文本打印“您还没有任何项目!”按‘添加项目’按钮添加一个。”
有什么已知的方法可以达到我想要的吗?
理由是:
我的应用程序有一个项目列表,但当该列表为空时,我显示一个“@android:id/空”TextView代替。TextView中的文本通知用户如何添加新项。我想让我的布局万无一失的变化(是的,我是傻瓜的问题:-)
我创建了一个简单的gradle插件,允许你从另一个字符串引用一个字符串。您可以引用在另一个文件中定义的字符串,例如在不同的构建变体或库中。这种方法的缺点——IDE重构不会找到这样的引用。
使用{{string_name}}语法引用字符串:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="super">Super</string>
<string name="app_name">My {{super}} App</string>
<string name="app_description">Name of my application is: {{app_name}}</string>
</resources>
要集成插件,只需将下一个代码添加到应用程序或库模块级构建中。gradle文件
buildscript {
repositories {
maven {
url "https://plugins.gradle.org/m2/"
}
}
dependencies {
classpath "gradle.plugin.android-text-resolver:buildSrc:1.2.0"
}
}
apply plugin: "com.icesmith.androidtextresolver"
更新:
该库不支持Android gradle插件3.0及以上版本,因为该插件的新版本使用aapt2,它将资源打包为.flat二进制格式,因此打包的资源对该库不可用。作为临时解决方案,您可以通过设置android禁用aapt2。在gradle中enableAapt2=false。属性文件。
除了以上Francesco Laurita的回答https://stackoverflow.com/a/39870268/9400836
似乎有一个编译错误“&entity被引用,但未声明”,可以通过引用外部声明来解决,就像这样
res - raw entities耳鼻喉科。
<!ENTITY appname "My App Name">
res /价值/ strings.xml
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE resources [
<!ENTITY appname SYSTEM "/raw/entities.ent">
]>
<resources>
<string name="app_name">&appname;</string>
</resources
虽然它编译和运行,但它有一个空值。也许有人知道怎么解决。我会发表评论,但最低声誉是50。