6.1 资源的类型及存储方式:

Android应用资源可分为两大类:

(1)、无法直接访问的原生资源,保存在assets目录下,应用程序需要通过AssetManager以二进制的形式来读取资源;

(2)、可通过R资源清单类访问的资源,保存在res目录下,在编译应用的时候,会自动在R.java文件中为这些资源创建索引。

6.1.1  资源的类型以及存储方式:

如下:/res/anim/   存放动画的XML文件;

/res/color/   存放定义不同状态下颜色列表的XML文件;

/res/drawable/  存放各种位图文件(如*.png、*.9.png、*.jpg、*.gif),除此之外还有各种Drawable对象的XML文件(包括BitmapDrawable、AnimationDrawable等其他各种子类的对象)( 注:*.9.png是一种非失真性压缩位图图形文件格式。1、允许开发人员定义可扩展区域,当需要延伸图片以填充比图片本身更大区域时,可扩展区的内容被延展。2、允许开发人员定义内容显示区,用于显示文字或其他内容);

/res/layout/   存放各种用户界面的布局文件;

/res/menu/   存放为应用程序定义各种菜单的资源,包括选项菜单、子菜单、上下文菜单资源等;

/res/raw/   存放任意类型的原生资源,在java代码中可通过Resources对象的openRawResource(int id)方法来获取该资源的二进制输入流;

注:如果应用程序需要使用原生资源,推荐把这些原生资源保存到/assets目录下,然后在应用中使用AssetsManager来访问这些资源;

/res/values/    存放各种简单值的XML文件,这些简单值包括字符串值、整数值、颜色值、数组等(建议的资源文件的命名:arrays.xml,colors.xml,dimens.xml,strings.xml,styles.xml等);

(提示:系统提供了drawable-ldpi(低分辨率)、drawable-mdpi(中等分辨率)、drawable-hdpi(高分辨率)三个子目录,这三个子目录的作用就相当于drawable子目录。大部分程序,系统会选择drawable-mdpi目录下的图片文件,如果系统使用高分屏,那么系统将会选择drawable-hdpi目录下的图片文件)。

6.1.2 使用资源

1、在java代码中使用资源

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

<package_name>:指定R类所在包,实际上就是使用全限定类名;

<resource_type>:R类中代表不同资源类型的子类;

<resource_name>:指定资源的名称。

2、在Xml代码中使用资源

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

6.2 使用字符串、颜色、尺寸资源

Android颜色值支持常见的四种形式:#RGB、#ARGB、#RRGGBB、#AARRGGBB

与定义字符串资源类似的是,Android也允许使用资源文件来定义boolean常量(也可以是整形常量),可在/res/values目录下增加一个boolean.xml文件(文件名自由选择)。

如下:...........

<resources>

<boolean name="is_male">true</bool>

</resources>

6.3数组(Array)资源

数组元素包含三种子元素,如下:

1、<array.../>子元素:定义普通类型的数组(如:Drawable数组);

2、<string-array.../>子元素:定义字符串数组;

3、<integer-array.../>子元素:定义整形数组。

Resource提供如下方法:

1、intgertStringArray(int id):根据资源文件中字符串数组资源的名称来获取实际的字符串数组;

2、int getIntArray(intid):根据资源文件中整形数组资源的名称来获取实际的整形数组;

3、TypedArrayobtainTypedArray(int id):根据资源文件中普通数组资源的名称来获取实际的普通数组。

注意:TypedArray代表一个通用类型的数组,该;类提供了getXxx(int index)方法来获取指定的索引处的数组元素。

6.4 使用(Drawable)资源

注:Android不允许图片资源文件名中出现大写字母,且不能以数字开头。否则AndroidSDK 无法为该图片在R类中生成资源索引

6.4.2 StateListDrawable资源

StateListDrawable用于组织多个Drawable对象。当使用StateListDrawable作为目标组件的背景、前景图片时,StateListDrawable对象所显示的Drawable对象会随目标组件状态的改变而自动切换。

定义StateListDrawable对象的XML文件的根元素为<selector../>,该元素可以包含多个<item../>元素。它的属性有android:color指定颜色,android:drawable指定Drawable对象,android:state_xxx(其中有:checkable可勾选状态、checked已勾选状态、enabled可用状态、first开始状态、focused已得到焦点状态、last结束状态、middle中间状态、pressed已被按下状态、selected已被勾选状态、state_window_focused窗口已得到焦点状态):指定一个特定的状态。

6.4.3 LayerDrawable资源

与StateListDrawble类似,LayerDrawable包含一个Drawable数组,系统按这些Drawable对象的数组顺序绘制,索引最大的Drawable对象将被绘制在最上面。

定义LayerDrawable对象的XML文件的根元素为<layer-list.../>,该元素可以包含多个<item../>元素。它的元素有android:drawable指定作为LayerDrawable元素之一的Drawable对象,android:id为该Drawable对象指定一个标识。android:buttom|top|left|button用于指定将该Drawable对象绘制到目标组件的指定位置。

6.4.4 ShapeDrawable资源

ShapeDrawable用于定义一个基本的几何图形,定义ShapeDrawable的XML文件的根元素是<shape../>元素。它的元素有android:shape=["rectangle"| "oval"|"line"|"ring"];

6.4.5 ClipDrawable资源

ClipDrawable代表从其他位图上截取的一个"图片片段"。它的属性有android:drawable指定截取的源Drawable对象,android:clipOrientation指定截取方向,可设置水平截取或垂直截取,android;gravity指定截取时的对齐方式。另外使用ClipDrawable对象时可调用setLevel(int level)方法来设置截取的区域大小。setLevel()可实现图片徐徐展开的效果。

6.4.6 AnimationDrawable资源

Android既支持传统的逐帧动画(图片的切换),也支持通过平移、变换计算出来的补间动画。

定义补间动画的XML资源文件以<set.../>元素作为根元素。它的元素有alpha设置透明度的改变,scale设置图片进行缩放,translate设置图片进行位移变换,rotate设置图片进行旋转。

//加载动画资源

final Animation anim=AnimationUtils.loadAnimation(this,R,anim.my_anim);

//设置动画结束后保留结束状态

anim.setFillAfter(true);

//开始动画

image.startAnimation(anim);

6.5 使用原始XML资源

通过Resources的两个方法来获取Xml文件

1、XmlResourceParsegetXml(int id):获取XML文档,并使用一个XmlPullParser来解析XML文档,该方法返回一个解析器对象(XmlResourceParser是XmlPullParser的子类)。

2、InputStreamopenRawResource(int id):获取XML文档对应的输入流。

Android平台已经内置了Pull解析器,而且Android本身也使用Pull解析器来解析各种XML文档,因此Androi推荐开发者Pull解析器来解析XML文档。

6.5.2 使用原始XML文件

6.7  使用菜单(Menu)资源

6.7.1 定义菜单资源

菜单资源文件通常应该放在/res/menu目录下,菜单资源的根元素通常是<menu.../>元素,它包含的元素有item定义菜单项,group将多个定义的菜单包装成一个菜单组checkableBehavior:指定该组菜单的选择行为,menuCategory对菜单进行分类,指定菜单的优先级,visiable指定该组菜单是否可见,enable指定该组菜单是否可用。其中item元素用于定义一份菜单项,包含的元素有id、title、icon等。

@override

public boolean onCreateOptionsMenu(Menu menu){

MenuInflater  inflater=newMenuInflater(this);

inflator.inflate(R.menu.my_menu,menu);

return super.omCreateOptionMenu(menu);

@override

public void onCreateContextMenu(ContextMenumenu,View source,ContextMenu.ContextMenuInfo menuInfo){

MenuInflater inflater=new MenuInflater(this);

inflater.inflate(R.menu.context,menu);

}

6.8  样式(Style)和主题(Theme)资源

6.8.1 样式资源

样式资源文件的根元素是<resources.../>元素,该元素内可包含多个<style.../>子元素,每个<style.../>元素定义一个样式。它包含的属性有name指定样式的名称,parent指定该样式所继承的父样式(当继承某个父样式时,该样式将会获得父样式中定义的全部格式,也可以覆盖父样式中指定的格式)。

6.8.2主题资源

主题与样式的区别主要体现在:

1、主题不能作用于单个的View组件,主题应该对整个应用中的所有Activity起作用,或对指定的Activity起作用。
2、主题定义的格式应该是改变窗口外观的格式,例如窗口标题、窗口边框等。

主题的设置有两种方法:

一个主题的名字是CrazyitTheme
1、在java代码里

setTheme(android.R.style.CrazyitTheme);

2、在AndroidManifest.xml文件中对指定应用、指定Activity应用主题更加简单

可在<application.../>或<activity.../>元素中添加android:theme="@style/CrazyTheme"

如果想要利用某个系统的主题,对它进行局部修改,则可通过继承系统主题来实现自定义主题

<style name="CrazyitTheme"parent="@android:style/Theme.Dialog">

6.9 属性(Attribute)资源

属性资源文件的根元素也是<resources.../>,该元素里包含两个元素,attr子元素,定义一个属性,declare-styleable子元素,定义一个styleable对象,每个styleable对象就是一组attr属性的集合。

6.10 使用原始资源

除了之前介绍的各种XML文件、图片文件之外,android应用可能还需要用到大量其他类型的资源,比如声音资源等。

AssetManager是一个专门管理/assets/目录下原始资源的管理类,AssetManager提供了如下两个常用方法来访问Assets资源。

1、InputStreamopen(String fileName):根据文件名来获取原始资源对应的输入流。

2、AssetFileDescriptoropen(String fileName):根据文件名来获取原始资源对应的AssetFileDescriptor。AssetFileDescriptor代表了一项原始资源的描述,应用程序可通过AssetFileDescriptor来获取原始资源。

6.11 国际化和资源自适应

java程序的国际化主要通过三个类完成:

1、java.util.ResourceBundle用于加载一个国家、语言资源包;

2、java.util.Locale 用于封装一个特定的国家/区域、语言环境;

3、java.text.MessageFormat用于格式化带占位符的字符串。

java不可能支持所有的国家和语言,如需要获取java所支持的语言和国家,可调用Locale类的getAvailableLocales方法获取,该方法返回一个Locale数组,该数组里包含了Java所支持的语言和国家。

例如:

1、res\values-en-rUS目录下的string.xml是美式英语的字符串资源文件;

2、res\values-zh-rCN目录下的string.xml是简体中文的字符串资源文件。

6.12 本章总结

首先本章主要介绍了Android应用资源的存储方式、Android应用资源的使用方式;Android应用的字符串资源、颜色资源、尺寸资源、数组资源、图片资源、各种Drawable资源、原始XML资源、布局资源、菜单资源、样式和主题资源、属性资源、原始资源等各种资源文件。

其次介绍了Android应用的国际化

第六章 Android应用的资源相关推荐

  1. 浅入浅出 Android 安全:第六章 Android 安全的其它话题

    第六章 Android 安全的其它话题 来源:Yury Zhauniarovich | Publications 译者:飞龙 协议:CC BY-NC-SA 4.0 在本章中,我们会涉及到与 Andro ...

  2. Android群英传》读书笔记 (3) 第六章 Android绘图机制与处理技巧 + 第七章 Android动画机制与使用技巧...

    第六章 Android绘图机制与处理技巧 1.屏幕尺寸信息 屏幕大小:屏幕对角线长度,单位"寸": 分辨率:手机屏幕像素点个数,例如720x1280分辨率: PPI(Pixels ...

  3. 第六章Android绘图机制与处理技巧(Android群英传)

    本章将介绍关于Andorid绘图机制的一些高级技巧与分析 6.1.屏幕的尺寸信息 一般我们以720x1280为标准原稿,那么1dp = 2px 6.2.2D绘图基础 Canvas提供了很多api 如: ...

  4. 第六章 Android应用的生命周期

    应用程序的生命周期: Android系统决定一个进程生命周期的主要因素包括: 1.系统当前剩余多少可用内存--内存不足时,杀死一些进程释放内存 2.该进程对于用户的重要性--优先杀死对用户不重要的进程 ...

  5. android 美颜 技术点,《Android 美颜类相机开发汇总》第六章 Android OpenGLES 美妆定制实现...

    美妆介绍 美颜类相机中一般会有彩妆功能,彩妆基本上都是贴图实现,这跟动态贴纸的贴图又不一样,动态贴纸的贴图一般是通过对贴纸进行透视变换实现的. 美妆分类 美妆主要包括唇彩.腮红.眼影.眼线.双眼皮.美 ...

  6. 微型计算机系统与接口重要吗,微型计算机系统与接口 马宏锋 等编著 第六章

    微型计算机系统与接口 马宏锋 等编著 第六章 (67页) 本资源提供全文预览,点击全文预览即可全文预览,如果喜欢文档就下载吧,查找使用更方便哦! 9.90 积分 6.1 输入/输出接口概述 内容简介6 ...

  7. Android 渗透测试学习手册 第六章 玩转 SQLite

    第六章 玩转 SQLite 作者:Aditya Gupta 译者:飞龙 协议:CC BY-NC-SA 4.0 SQLite 是一个开源数据库,具有许多类似于其他关系数据库(如 SQL)的功能. 如果你 ...

  8. Android[中级教程]第六章 XML解析之SAX解析器

    Android[中级教程]第六章 XML解析之SAX解析器 分类: Android中级2011-10-06 01:52 125人阅读 评论(1) 收藏 举报 接上一章,这一章我们就来学习SAX解析器, ...

  9. 增长黑客内容摘要(四五六章)

    增长黑客内容摘要(四五六章) 一.第四章 4.1 职场社交巨头的用户激活秘诀 用户的数量与结成的关系网络深度直接决定了其价值的大小. 策略:1.新册用户到达"邀请好友"页面时,如果 ...

最新文章

  1. egret 发布android原生项目(一)打包apk
  2. html 模板引擎 热部署,springboot系列四、配置模板引擎、配置热部署
  3. jackson的jar包下载
  4. ABAP CCDEF, CCIMP, CCMAC, CCAU, CMXXX这些东东是什么鬼
  5. python集合的元素可以是_Python集合的元素中,为什么不可以是包含嵌套列表的元组?...
  6. python读取data_Python批处理数据读取方法的细节:dataloader,Pytorch,批量,详解,DataLoader...
  7. cmake取消宏定义_魔兽怀旧服,牧师实用宏
  8. linux中lamp架构搭建,Linux LAMP架构平台搭建
  9. PDF如何编辑,怎么删除空白页面
  10. 《Python算法教程》——1.6 如果您感兴趣
  11. 推荐三个实用的开源项目
  12. angular的运行机制_Angular开发实践(二):HRM运行机制
  13. vs2010旗舰版产品密钥
  14. matlab麦克斯韦电磁方程组,从麦克斯韦方程组到电磁波动方程
  15. 计算机家庭组改工作组,win7系统如何更改工作组
  16. 数据特征分析 - 帕累托分析法
  17. python pip是什么的简写_Python包管理器pip
  18. 辣椒的python之旅
  19. supervision
  20. 2021年中国柠檬茶行业发展概况及行业发展趋势分析[图]

热门文章

  1. NFS挂载参数详解及使用建议
  2. FWD:互联网重塑中国商业
  3. 人教版五年级下册计算机试题答案,人教版五年级下册数学练习题及答案人教版...
  4. CISP-CSE认证心路历程,小白分享如何学习云安全
  5. python判断邮箱格式是否正确_【案例】Python - 用正则判断邮箱是否合法
  6. 2005-2020全国及各省家庭承包耕地流转总面积及经营耕地面积
  7. 弘辽科技:拼多多客服回复率低是为什么?其考核标准是什么?
  8. (读书笔记)《玩着玩着就能成为PPT高手》——反面教材
  9. APP开发-使用Vue3+vant+html5+ 实现相机拍照,选取相册图片,裁剪图片以及提取图片中的文字等功能(二)
  10. 选购阿里云的三种方式(图文教程)