检索String和String Array资源的区别?

时间:2014-05-10 01:38:18

标签: android xml android-resources

我是Android新手并试图理解我从教程中编写的代码。与此同时,每当我想要真正理解某些内容时,我都会引用文档。

The documentation in question

该页面讨论了字符串资源。

对于字符串,在字符串部分下,它指出我可以检索XML文件中定义的字符串,如下所示:String string = getString(R.string.hello);

有问题的XML:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string name="hello">Hello!</string>
</resources>

现在,对于一个字符串数组,在 String Array 部分下,它声明我可以检索XML文件中定义的字符串字符串数组,如下所示:

Resources res = getResources();
String[] planets = res.getStringArray(R.array.planets_array);

有问题的XML:

<?xml version="1.0" encoding="utf-8"?>
<resources>
    <string-array name="planets_array">
        <item>Mercury</item>
        <item>Venus</item>
        <item>Earth</item>
        <item>Mars</item>
    </string-array>
</resources>

为什么我必须为字符串数组Resources res = getResources();而不是XML文件中的字符串?

String[] planets = getStringArray(R.array.planets_arry);不起作用吗? resources有更多方法,即对于像String Arrays这样的更复杂的情况吗?是getString这么简单,在资源下不需要它是好的吗?我在哪里可以找到一份清单,列出要求我做Resources res = getResources();与不要求做什么的内容?

最后,getResources是否可以获取我的Android项目中的每一个资源,而不管它可能位于哪个XML文件中?

2 个答案:

答案 0 :(得分:4)

  

我为什么要做资源res = getResources();对于一个字符串   数组,而不是XML文件中的字符串?

getString()是Context对象的一个​​方法(主要是一个Activity,但也可以是一个Service)。该方法的代码是:

public final String getString(int resId) {
    return getResources().getString(resId);
}

含义getString()只是Context类提供的一种方便方法。最后,两个调用都是相同的,即通过Resource对象检索资源。

  

String [] planets = getStringArray(R.array.planets_array);不   工作?

否,因为Context没有方便的方法来检索String []。

  

资源有更多方法,即更复杂的情况   字符串数组?

是。见http://developer.android.com/reference/android/content/res/Resources.html。 如果由你来决定它们是否比getStringArray更复杂,我会离开。

  

getString如此简单,在资源下不需要它吗?

资源确实有一个getString(int)方法:http://developer.android.com/reference/android/content/res/Resources.html#getString(int)

  

我在哪里可以找到一个列表,将需要我做资源的内容分开   res = getResources();与什么不需要?

没有这样的清单。 JavaDoc for Context将告诉您使用的方便方法: http://developer.android.com/reference/android/content/Context.html

  

最后,getResources会让我获得Android中的每一个资源   项目,无论它可能是什么XML文件?

仅当它在资源xml文件中时。布局或Drawables不能包含String资源。

答案 1 :(得分:0)

致电getString()getResources().getStringArray()基本相同,如上所述here方法getString()只是一种方便的方法,因为它被使用了经常。

public final String getString(int resId) {
    return getResources().getString(resId);
}

我还要补充一点,您不能在getStringArray所在的其他资源文件中使用getString(),例如XML布局。