何时以及为什么应该使用getResources()函数?

7
我刚开始接触Android开发并进行试验。 getResources()文档中提到它将[r]返回应用程序包的Resources实例。 在我看过的代码示例中,它被用于访问res中的资源,但似乎你也可以直接访问它们。
例如,要从res/values/strings.xml检索my_string
<!-- 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个回答

4

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

R.id、R.drawable 都返回在构建时由 Android 分配的动态整数。假设我们有一个需求,需要根据国家名称访问该国的国旗图像。

如果我们的图像名称是 us.png,而我们拥有的值是 'us'。处理它的两种方式如下:

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

或者

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);

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


2

这在非活动类中很有用。

您可以将上下文传递给类,从而可以访问资源。


-1
一个继承Activity的类也会继承getResources()方法。如果你有一个是Activity(或其派生类)的类,你可以通过继承来访问这个方法(继承是面向对象编程中一个非常基础的概念)。如果你有一个不是这种类的类,你需要授权访问这样的上下文以访问所需的资源。
如果您需要更多关于继承、多态或其他面向对象编程方面的信息,建议参考各种网站或学校课程涉及此类问题。

它是否继承了 getResources(),还是你指的是应用程序包的资源实例? - Peter Ajtai

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接