在XML中关联不同数据的最简单,最有效的方法是什么?

时间:2015-10-19 13:21:51

标签: android xml

基本上我想要实现的是从代码中访问两个相关的资源。

考虑这个例子,我能想到的最好的解决方案是:

<?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。希望我设法解释我想要实现的目标,谢谢!

2 个答案:

答案 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中获取数据。