Android 之Accessing Resource(资源调用)

  次阅读 作者:智能小宝 来源:互联网 2016-01-14 11:11 我要评论(0)

当你在应用程序中提供了某种资源后(在Providing Resources中有讨论),你就可以通过引用资源ID号来调用相关的资源。所有的资源ID号都在你工程下的R.class文件中定义好,这是由aapt工具自动生成的。

当你的应用程序被编译时,aapt工具就会自动生成R.class 文件,这个文件中包含有res/目录下所有资源的ID号。对于每一种资源类型都有一个R的子类对应着(例如:R.drawable中包含着所有drawable资源),并且对每个特定类型的所有资源都有一个静态的整型数值一一对应(例如:R.drawable.icon)。这个整型数值就是这个特定资源的ID号,你可以通过它来获取你的对应资源。

虽然R.class文件中定义着每种资源的ID号,但是你不应该也不需要到该文件下去查看某个资源的ID号。一个资源的ID号一般的组成如下:

l资源类型: 每种资源都会被分组到一种特定的资源类型,例如string, drawable, and layout 。要了解更多关于不同的资源类型,见Resource Types。

l资源名,同时也是:文件名,不包括拓展名;或者是XML 中android:name属性的值,条件是这个资源是一个简单的值(例如一个字符串)。

调用某个资源有两种方法:

l在代码中调用:通过使用R.class 的相应子类中的静态整形数值,例如:

R.string.hello

string 是资源类型,hello是资源名。当你通过这种方式提供资源的ID号时,有很多Android APIs 就可以调用你的相应资源了。详见:在代码中调用资源。

l在XML中调用:通过特殊的XML语法同样可以对应到你的R.class文件中的相关资源ID,例如:

@string/hello

string 是资源类型,hello是资源名。你可以在任何需要使用自己提供的资源的地方,通过这种语法在XML中调用。详见:在XML中调用资源。

代码中调用资源

你可以把资源ID号作为方法的参数在代码中调用该资源。例如,你可以设置一个ImageView通过调用setImageResource()方法来使用res/drawable/myimage.png 资源:

ImageView imageView = (ImageView) findViewById(R.id.myimageview);

imageView.setImageResource(R.drawable.myimage);

你也可以通过调用Resources类中的方法来获取某一特定的资源,通过getResources()方法可以得到Resources类的一个实例。

语法

这是在代码中引用资源的语法:

[<package_name>.]R.<resource_type>.<resource_name>

l<package_name> 资源所在的包名 (当你要应用自己包下的资源时,该字段不需要填写).

l<resource_type> R类下对应一种特定资源类型的子类.(译者注:如R.String)

l<resource_name> 可以是不包含文件拓展名的资源文件名或者XML元素中android:name 属性的值(仅限简单的值,如字符串)

了解更多关于每种资源类型的信息以及如何引用它们,见Resource Types 。

用例

有很多方法可以接受资源的ID号作为参数,你可以通过Resources中的方法来获取某种对应的资源。你可以通过Context.getResources()方法来获得Resources类的一个实例。.

以下是在代码中调用资源的一些例子:

注:通过一个drawable类型的资源给当前屏幕加载背景 getWindow().setBackgroundDrawableResource(R.drawable.my_background_image) ;

注:通过从Resources对象获取的字符串给Activity 设置标题,因为该方法需要一个字符序列而不是一个资源ID号 getWindow().setTitle(getResources().getText(R.string.main_title));

注:给当前屏幕载入自定义布局setContentView(R.layout.main_screen);

注:通过从Resources 实例获取的动画来设置一个动画幻灯片

mFlipper.setInAnimation(AnimationUtils.loadAnimation(this,R.anim.hyperspace_in));

注:通过资源ID号给TextView 类的对象设置显示文字

TextView msgTextView = (TextView) findViewById(R.id.msg);

msgTextView.setText(R.string.hello_message);

特别提醒: 你不能自己手动修改R.java 文件,这个文件是在你的工程被编译时由aapt工具自动生成的。所有程序中的修改都会在工程下一次编译时重写。

本站文章信息来源于网络以及网友投稿,本站只负责对文章进行整理、排版、编辑,是出于传递更多信息之目的,并不意味着赞同其观点或证实其内容的真实性。如果您有什么意见或建议,请联系QQ28-1688-302!

人工智能实验室
相关文章相关文章
  • 未来两年人工智能要怎么走?看这篇就够了

    未来两年人工智能要怎么走?看这篇就够了

  • 韩春雨称已能重复实验结果 近期将有消息公布

    韩春雨称已能重复实验结果 近期将有消息公布

  • 英国研发“杀生”机器人 通过生命体获取能量

    英国研发“杀生”机器人 通过生命体获取能量

  • 无人驾驶汽车如何改变城市生活?听听他们怎么说

    无人驾驶汽车如何改变城市生活?听听他们怎么说

网友点评网友点评
阅读推荐阅读推荐

据国外媒体报道,在过去两年内,聊天机器人(chatbot)、人工智能以及机器学习的研发和采用取得了巨大进展。许多初创公司正利用人工智能和...

霍金 视觉中国 图 英国著名物理学家霍金(Stephen Hawking)再次就人工智能(AI)发声,他认为:对于人类来说,强大AI的出现可能是最美妙的...

文|郑娟娟 今年,人工智能(AI) 60岁了。在AI60岁的时候,笔者想要介绍一下AI100,一个刚刚2岁的研究项目,但它的预设寿命是100年,甚至更长...

AlphaGo与李世石的人机大战,为大众迅速普及了人工智能的概念。 但对谷歌而言,除了下围棋,现在的人工智能进展到哪一步了?未来,人工智能...