何时以及为什么要使用getResources()?

时间:2011-10-17 00:44:44

标签: android resources

我刚刚开始使用Android开发和玩游戏。

documentation for getResources()表示会[r]eturn a Resources instance for your application's package.

在代码示例中,我已经看到这用于访问res中的资源,但似乎您可以直接访问它们。

例如,从my_string检索res/values/strings.xml

<!-- strings.xml -->
...
<string name="my_string">This is my string</string>
...

您可以使用这两种方式

第一种方式:

// MyActivity.java //  
... 
// No need to use getResources()
String msg = getString(R.string.my_string);
...

第二种方式:

// MyActivity.java //
...
// What is the point of getResources() here?
// It works but it requires "import android.content.res.Resources;" and is longer
Resources the_resources = this.getResources();
String msg = the_resources.getString(R.string.my_string);
...

那么,您何时需要使用getResources()来访问资源?似乎没有必要,或者是隐式调用,还是必须调用它来访问某些其他类型的资源或以其他方式访问资源?

3 个答案:

答案 0 :(得分:3)

资源有许多我们可能需要的辅助方法。

R.id,R.drawable在构建时间内由android分配的所有返回动态int。假设我们需要根据其名称访问coutries标志图像。

如果我们将图片名称设为us.png,则我们拥有的值为“我们”。处理它的两种方法是

if(countryName.equals("us")){
    imageview.setImageRsource(R.drawable.us);
}

OR

Resources res = getResources();
int imageId = res.getIdentifier(getIdentifier(countryName, "drawable"
        ,"com.myapp");
imageview.setImageRsource(imageId);

第二种方法将是最好的方法,特别是当有超过50个国家或者你最终会得到一个非常长的if-else或switch语句时。

当您需要访问Assets文件夹中的内容时,也会使用资源对象

res.getAssets().open(YOUR FILE);

资源实例也可以传递给其他类文件来访问资源。这些是您可以使用它的一些场景。

答案 1 :(得分:2)

它在非活动类中很有用。

您将上下文传递给该类,然后您可以访问该资源。

答案 2 :(得分:-1)

继承Activity的类也会继承getResources()。如果你有一个活动(或其衍生物)的类,你可以访问这个方法(通过继承,在面向对象编程中真正的真正的基本概念。如果你有一个类< em>不是这种类的衍生物,您需要授予对这种上下文的访问权限以访问所述资源。

如果您需要有关面向对象编程的继承,多态等的更多信息,我建议您参考涉及此类问题的各种网站或学校课程。