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!

人工智能实验室
相关文章相关文章
  • teamLab创始人猪子寿之: 抛去衣食住行,我还剩下什么?

    teamLab创始人猪子寿之: 抛去衣食住行,我还剩下什么?

  • 2018深圳国际人工智能展览会 2018 shenzhen International Artif

    2018深圳国际人工智能展览会 2018 shenzhen International Artif

  • Oculus公布原型机,大幅度提升可视角,能实现140°的视场水平

    Oculus公布原型机,大幅度提升可视角,能实现140°的视场水平

  • Michael I. Jordan带你解读百万奖金ATEC蚂蚁人工智能大赛

    Michael I. Jordan带你解读百万奖金ATEC蚂蚁人工智能大赛

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

据外媒报道,STEER打造了首款完全自动驾驶停车技术,旨在使常规车辆转变为无人驾驶车辆。STEER的首款技术应用是4级自动驾驶及网络安全停车...

近日,美国软性机器抓手制造商 Soft Robotics 宣布,获得 2000 万美元的融资,本轮投资者包括 Scale Venture Partners,Calibrate Ventures...

据外媒报道,加州车管局发布了《2017自动驾驶脱离报告(California Autonomous Vehicle Disengagement Reports)》,其中谈及了脱离的具体...

用人机语音交互,来解决智能家居适老的问题;通过家庭门禁与安防套件、空气净化套件、可燃气体与有害气体监控套件等相互联动,在不同生活情...