当前位置: 首页 > 编程日记 > 正文

Android开发者指南(22) —— Accessing Resources


前言

本章内容为Android开发者指南的Framework Topics/Application Resources/Accessing Resources章节,译为"资源调用",版本为Android 3.2 r1,翻译来自:"CodeGuy",欢迎访问他的博客:"http://www.cnblogs.com/CodeGuy/",再次感谢"CodeGuy" !期待你一起参与翻译Android的相关资料,联系我over140@gmail.com。

声明

欢迎转载,但请保留文章原始出处:)

博客园:http://www.cnblogs.com/

Android中文翻译组:http://goo.gl/6vJQl


Accessing Resource

译者署名:CodeGuy

译者链接:http://www.cnblogs.com/CodeGuy/

版本:Android 3.2 r1

资源的调用

当你在应用程序中提供了某种资源后(在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号一般的组成如下:

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

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

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

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

R.string.hello

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

* 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>

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

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

*   <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工具自动生成的。所有程序中的修改都会在工程下一次编译时重写。
 
在XML中调用资源

你可以通过引用一个存在的资源来给一些XML的属性和元素指定具体的值。你经常会在创建布局文件的时候这样做,给你的部件提供字符串和图像。

例如,如果你添加一个按钮到你的布局中,你应该使用一个字符串资源来指定显示在按钮上的文字:

<Button

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:text="@string/submit" />
(译者注:@string/submit即为你定义好的字符串资源)
 

语法

以下是在XML资源文件中引用资源的语法:

@[<package_name>:]<resource_type>/<resource_name>

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

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

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

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

用例

在某些情况下你必须得在XML中使用资源(例如:给部件应用一个drawable图像),但是你可以在XML中任何可以接受简单值的地方使用资源。例如,如果你有如下包含color(颜色)资源和string(字符串)资源的资源文件:

<?xml version="1.0" encoding="utf-8"?>

<resources>

   <color name="opaque_red">#f00</color>

   <string name="hello">Hello!</string>

</resources>

你可以使用这些定义好的资源在以下的布局文件中来设置文本的颜色和内容:

<?xml version="1.0" encoding="utf-8"?>

<EditText xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:textColor="@color/opaque_red"

    android:text="@string/hello" />

在以下情况下在引用资源时你不需要指定包名,因为这些资源在你自己的当前包中。要引用一个系统资源,你需要在引用时声明资源所在包名。例如:

<?xml version="1.0" encoding="utf-8"?>

<EditText xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:textColor="@android:color/secondary_text_dark"

    android:text="@string/hello" />

特别提醒:在需要用字符串时,你应该坚持使用字符串资源,因此你的应用程序就可以对其他语言进行本地化。关于创建可替代资源(例如本地化字符串),Providing Alternative Resources

你甚至可以可以在XML文件中用资源来创建别名。例如,你可以创建一个drawable类型的资源,这个资源是另一个drawable类型资源的别名:

<?xml version="1.0" encoding="utf-8"?>

<bitmap xmlns:android="http://schemas.android.com/apk/res/android"

    android:src="@drawable/other_drawable" />

这个听起来像是多余的介绍,但是在使用可替代资源的时候会很有用。了解更多关于Creating alias resources

引用样式属性

一个样式属性资源允许你在当前应用的主题中引用一个属性的值。引用一个样式属性允许你通过样式化UI元素以匹配当前主题提供的标准变化来定制UI元素的外观,而不是通过提供一个硬编码的值。引用样式属性从基本上说,“使用当前主题中的属性已定义好的样式”。

引用样式属性,其名称的语法与普通的资源格式几乎是等同的,但是取代符号(@),这使用的是问号(?),资源类型部分是可选的。例如:

                    ?[<package_name>:][<resource_type>/]<resource_name>

例如,这个例子将介绍如何引用一个属性来设置文本的颜色以匹配系统主题的“主”文本的颜色:

<EditText id="text"

    android:layout_width="fill_parent"

    android:layout_height="wrap_content"

    android:textColor="?android:textColorSecondary"

    android:text="@string/hello_world" />

在这,android:textColor 属性指定了当前主题中一个样式属性的名称。Android 现在使用应用于android:textColorSecondary 样式属性的值作为该部件中android:textColor 的值。因为系统资源工具知道这个属性资源就是环境所期望的,所以你不需要显式地声明是那个类型(这个类型可能是?android:attr/textColorSecondary)—你可以排除掉attr类型。

调用平台资源

Android中包含有很多标准的资源,例如styles(样式)、themes(主题)、layouts(布局)等等。要调用这些资源,需要通过android包名来限定你的资源。例如,Android提供了一个布局资源,你可以在ListAdapter中用以罗列表项。译者注ListAdapter列表适配器)

        setListAdapter(new ArrayAdapter<String>(this, android.R.layout.simple_list_item_1, myarray));

在这个例子中,simple_list_item_1是平台为ListView的表项定义的布局资源。你可以使用这个列表布局,而不需要自己创建表项布局。(更多关于ListView,参见List View Tutorial)。

相关文章:

如何快速实现HTML编辑器.NET组件

作者&#xff1a;未知 请作者速与本人联系得到“素材”首先我们需要得到一个HTML编辑器的原始代码&#xff0c;网上有不少这类的编辑器&#xff0c;如大名鼎鼎的RichTextBox&#xff0c;为了避免版权纠纷&#xff0c;以我所做得为例&#xff08;暂名&#xff1a;UltraTextBox…

罗永浩力荐,丁磊豪送的学习神器:手机查词真不如这支AI词典笔?

销量确实称得上火爆。尽管999元的直播优惠价价格并不低&#xff0c;但这支有道词典笔专业版在快手直播间还是经历了返场&#xff0c;最终20000多台一抢而空。 为这款产品站台的正是网易CEO丁磊&#xff0c;6月11日是他网上卖货的首秀&#xff0c;不过更重要的是&#xff0c;那天…

Thinking in java中关于Exception的一道面试题.

今天看到Thinking in Java中一个关于Exception的例子:最后看到有一篇总结的比较好的文章, 这里拿来记录下, 文章地址是:http://blog.csdn.net/salerzhang/article/details/46581457 感谢原作者. 1 class Annoyance extends Exception {}2 class Sneeze extends Annoyance {}3 …

使用 .NET 框架轻松开发完美的 Web 窗体控件

作者&#xff1a;David S. Platt 出自&#xff1a;微软 本文假定您熟悉 Visual Basic .NET、C# 和 HTML 下载本文的代码&#xff1a; WebC.exe (274KB) 摘要 预建的自定义控件可以简化和加快应用程序的设计&#xff0c;并使您能够维护 UI 的一致性。但是&#xff0c;预先打…

史上最强女游戏程序员

也许你听说过John Carmack 和Tim Sweeney等大牛的名字&#xff0c;而向来游戏工业都是阳盛阴衰&#xff0c;适逢国际妇女节&#xff0c;今天我为大家介绍游戏业界一位史上最强女游戏程序员&#xff1a;Corrinne Yu。 简历 以下是她在游戏业界内的简历 微软Halo团队首席引擎架构…

重磅日程公布!与百名大咖在线交流技术,2天20个AI论坛不可错过

当全球都在面向 AI 变革时&#xff0c;AI 不再是触不可及&#xff0c;它需要产业化落地&#xff0c;为社会创造价值。在这一轮技术革命、技术浪潮中&#xff0c;开发者们成为构建任何一家AI企业的核心竞争力。不过&#xff0c;不同于此前只懂开发语言、数据结构便可轻松躲过新技…

Python取出列表相应值的位置(表处理)

#需求在一个列表中&#xff0c;取出相应值的位置方法1&#xff1a;#脚本示例[rootlocalhost opt]# cat list.py #!/usr/bin/env python #_*_ coding:utf-8 _*_ name[!,#,*,Eric,wsyht,jack,jack,a,b,c,d,1,2,3,4,5,6,1,2,3,4,5,6,1,2,3,4,5,6,2332,4,2,6,2] first_pos 0 for …

rhel5.5安装xwindow

rhel5.5安装xwindow 1安装xwindow yum groupinstall "X Window System" 2、安装GNOME桌面环境 yum groupinstall "GNOME Desktop Environment" 3、卸载GNOME桌面环境 yum groupremove "GNOME Desktop Environment"转载于:https://blog.51cto…

使用 ASP.NET 加密口令

作者&#xff1a;未知 请作者速与本人联系当我们在网站上建立数据库时&#xff0c;保护用户的信息安全是非常必要的。多数用户不愿意让别人知道自己的信息&#xff0c;同时网管也不想因为安全问题而丢失网站的信誉。无论对于谁&#xff0c;安全问题都是非常重要的。为了解决这…

算法鼻祖高德纳,82 岁仍在写《计算机程序设计的艺术》

作者 | 年素清编辑 | 伍杏玲出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;高德纳&#xff08;Donald Ervin Knuth&#xff09;被誉为现代计算机科学的鼻祖&#xff0c;毕生致力于编译程序、属性文法和运算法则等领域的前沿研究&#xff0c;共出版专著17部&#x…

centos查看特定程序占用端口情况

ps axu |grep 程序名&#xff0c;找到特定程序的pidnetstat -nltp |grep pid即可。转载于:https://blog.51cto.com/zhukeqiang/1811735

关于页面刷新的问题

在做.net开发时&#xff0c;经常能碰到这样的情况&#xff0c;页面很长&#xff0c;而我们一般用的都是服务器端控件&#xff0c;用服务器端控件有这样一个缺点&#xff0c;就是控件每次都要和服务器交互&#xff0c;而产生页面的刷新&#xff0c;试想一下&#xff0c;如果页面…

技术直播:程序员副业的修炼指南!(限免报名)

面试造飞机&#xff0c;上班拧螺丝&#xff0c;每天想辞职&#xff0c;但无奈副业还“大器晚成”的样子&#xff01;那可能是你还没有选对副业&#xff01;滴滴 ~福利卡&#xff01;&#xff01;&#xff01;CSDN学院邀请汤小洋老师开设技术直播课《程序员副业之路-三大终极秘籍…

Linux 双网卡绑定测试

Linux 双网卡绑定测试 先介绍一下情况&#xff0c;服务器A和服务器B都是CentOS 4.6的系统&#xff0c;现在要做HA Cluster&#xff0c;为了避免裂脑的发生&#xff0c;要提高心跳链路的可靠性&#xff0c;下图是现时的连接情况&#xff0c;服务器A的eth2、eth3分别和服务器B的e…

第六章练习题和知识面扩充

作业题&#xff1a;1. 自动获取IP地址的命令是什么&#xff1f;您知道在什么情况下&#xff0c;您的Linux才可以自动获取IP地址&#xff1f;2. 远程连接Linux服务器&#xff0c;需要Linux服务器开启sshd服务&#xff0c;那么sshd服务默认监听哪个端口&#xff1f;这个端口是否可…

一文详解面向多级多模态场景的召回引擎

作者| 阿里文娱开发专家 崇懿、阿里文娱开发专家慧善责编 | 屠敏头图 | CSDN 下载自视觉中国出品 | CSDN&#xff08;ID&#xff1a;CSDNnews&#xff09;优酷视频搜索在文本搜索系统的基础上&#xff0c;不断探索视频搜索的方案&#xff0c;在多模态输入、多级多模态索引、跨模…

对比.Net PetShop和Duwamish来探讨Ado.Net的数据库编程模式

作者:卢彦.NET PetShop和Duwamish简单介绍相信大家一定听说过有名的"宠物店大战"&#xff0c;没错&#xff0c;本文的主角之一就是获胜方.NET PetShop&#xff0c;微软号称以27倍的速度和1/4的代码量遥遥领先于基于J2EE的PetStore宠物商店。虽然SUN也曾对此抱怨过不满…

如何直接将HTML代码加载到TWebBrowser

wbRecvContent//为 webbrowser控件 procedure TFrmMain.ShowHtmlCentent(slt: TStrings); var aMemory: TMemoryStream; pbuf: PAnsiChar; begin aMemory : TMemoryStream.Create(); try aMemory.Clear; slt.SaveToStream(aMemory); aMemory.Seek(0, soBeginning); wbRecvConte…

JavaScript基础(一) 数据类型

动态类型 JavaScript 是一种弱类型或者说动态语言。这意味着你不用提前声明变量的类型&#xff0c;在程序运行过程中&#xff0c;类型会被自动确定。 数据类型 最新的 ECMAScript 标准定义了 7 种数据类型: 6 种 原始类型: BooleanNullUndefinedNumberStringSymbol (ECMAScript…

DataGrid入门经典(C#)

作者&#xff1a;未知 请作者速与本人联系这篇文章主要介绍如何在DataGrid控件中实现编辑、删除、分类以及分页操作。为了实现我们的意图&#xff0c;我们使用SqlServer2000自带的NorthWind数据库。程序分为两部分&#xff1a; 1.包含HTML代码的.ASPX文件 2.包含所有逻辑及…

(札记)Altera Stratix IV系列FPGA TRUE LVDS RX input termination 在Quartus工程中的设置方法...

Altera Stratix IV系列FPGA Row bank的TRUE LVDS_RX支持oct&#xff08;on chip termination),所以设计的时候不需要外接一个100ohm电阻。备注&#xff1a;我使用的是友晶科技&#xff08;Terasic&#xff09;的DE4。 所以当我们使用到Stratix iv系列FPGA的row bank的lvds的时候…

直播:AI时代,普通程序员该如何转人工智能(限免报名)

常常有小伙伴在后台反馈&#xff1a;想了解人工智能&#xff0c;但是该怎么学&#xff1f;自学难度大又没有效果&#xff0c;该怎么办&#xff1f;CSDN为了解决这个难题&#xff0c;联合唐宇迪老师为大家带来了一场精彩的直播【年薪百万AI工程师亲授&#xff1a;小白实战培养计…

沃通免费SSL证书申请指南

我们在做一些exchange或lync项目的时候很多时候都会用到公网证书&#xff0c;比如&#xff1a;我们做exchange2013和Office 365混合部署&#xff0c;或者通过SEM暂存迁移或CEM直接转换迁移的时候都需要用到公网证书,下面为大家介绍1个免费的SSL证书及申请的方法&#xff0c;希望…

使用VS.NET2003编写存储过程

作者&#xff1a;未知 请作者速与本人联系数据表定义了如何在数据库中存储数据&#xff0c;但没有说明如何存取数据。我们还需要了解读写记录以便从表中再次调用选定行和列的详细信息。开发人员通常会在其代码中编写一些特殊的查询语句&#xff0c;用于读写数据。这不仅会导致…

谈Linux的安全设置

如今系统的安全变的越来越重要了&#xff0c;这里我想把我平时比较常使用的一些linux下的基本的安全措施写出来和大家探讨一下&#xff0c;让我们的Linux系统变得可靠。 1、BIOS的安全设置 这是最基本的了&#xff0c;也是最简单的了。一定要给你的BIOS设置密码&#…

亮风台提出用完全可训练的图匹配方法,优于最新SOTA | CVPR 2020

出品 | AI科技大本营&#xff08;ID:rgznai100&#xff09; 6月14日-19日&#xff0c;CVPR 2020在线上举行&#xff0c;据了解&#xff0c;本届大会共收到6656篇投稿&#xff0c;接收论文1470篇&#xff0c;录用率约22%&#xff0c;低于ICCV 2019论文录用率&#xff08;25%&…

数组与纠结的排序篇

数组之纠结的排序 1.数组是什么&#xff1f; 数组&#xff1a;所谓数组&#xff0c;就是相同数据类型的元素按一定顺序排列的集合&#xff0c;就是把有限个类型相同的变量用一个名字命名&#xff0c;然后用编号区分他们的变量的集合&#xff0c;这个名字称为数组名&#xff0c;…

ASP.NET结合COM组件发送Email

在开发电子邮件发送程序的时候&#xff0c;我们经常需要使用到相应的组件&#xff0c;其实不需要第三方的组件&#xff08;例如&#xff1a;Jmail&#xff09;照常可以做到发送Email的功能。 在系统目录&#xff08;如c:/winnt或c:/windows&#xff09;的system32子目录中可以找…

卡巴循环30天不限次数循环试用工具

本文需评论之后方可查看&#xff01; echo off title 卡巴循环30天不限次数循环试用工具 echo off echo 卡巴循环30天不限次数循环试用工具 echo. echo echo 卡巴斯基6/7/8试用过期时清除系统中使用痕迹&#xff0c;就象新系统重新安装卡巴一样 echo 1、在屏幕右下角红V卡巴图…

微软CEO纳德拉对话沈向洋:那些未来可期的计算机视觉研究与应用

编者按&#xff1a;6月16日&#xff0c;CVPR 2020 大会以全球连线的形式如期开幕。在大会的首场主题演讲中&#xff0c;微软公司 CEO 萨提亚纳德拉与微软公司前执行副总裁沈向洋进行了一场精彩的炉边对谈&#xff0c;分享了对计算机视觉、人工智能研究与应用前景的思考与展望。…