基本上我想要实现的是从代码中访问两个相关的资源。
考虑这个例子,我能想到的最好的解决方案是:
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="black">⬛</string><color name="black_c">#000000</color>
<string name="white">⬜</string><color name="white_c">#ffffff</color>
</resources>
在我的代码中给定一个字符串N,我可以通过在N字符串的末尾添加“_c”来访问与之关联的第二个字符串(⬛或⬜)或颜色。
所以,如果N =“黑”,我可以用N来检索⬛和#000000(用N +“_ c”)
有更好的方法吗?我的解决方案感觉有点hacky。希望我设法解释我想要实现的目标,谢谢!
答案 0 :(得分:1)
我有另一个建议。我希望它会对你有所帮助。
如果您有colors.xml和strings.xml(在values目录中)
<!-- colors.xml -->
<resources>
<color name="black">#000000</color >
</resources>
<!-- strings.xml -->
<resources>
<string name="black">Some black string</string>
</resources>
如果您能够获得不同的ID(即R.string.black或R.color.black),则可以使用相同的名称访问它们。 getIdentifier
()`方法可以做到。所以你可以尝试(未测试)
String name = "black;
String choice = "color"; //or "string" dependending on if you want the color or the string
int resID = getResources().getIdentifier(name, choice, getPackageName());
Resources resources = getResources();
//Then access using
//If choice=="color"
int color = resources.getColor(resId);
//If choice=="string"
String text = resources.getString(resId);
答案 1 :(得分:0)
雅听起来有点hacky。您可以使用样式将所有资源(作为该样式的属性)分组,然后读取这些样式。更多信息:How to retrieve style attributes programmatically from styles.xml
但这又听起来很糟糕。你的实际要求是什么?你建议的方式听起来不错。您可以继续执行该实现,因为从性能角度来看,它不需要任何额外的工作。只需确保编写一个简洁的API来从xml中获取数据。