分享

【新提醒】android 基础扫盲—资源管理(二)

 gideshi 2012-11-24
接上次android概述---android基础扫盲(一)http://www./forum.php?mod=viewthread&tid=157720&fromuid=564030
接下来继续,先介绍本帖主要内容:
1)资源文件概述
2)资源定义及运用
3)国际化
      惯例,先废话一会,android程序中,人们大都采用XML文件静态描述一些属性,定义界面,或者存储一些参数,可以夸张地说,android程序开发之所以开发如此简便、快捷,XML占大半功劳。所以进入本帖交流学习前,先普及一些XML知识。
XMLeXtensible Markup Language

定义:
维基百科:一种标记语言。标记指计算机所能理解的信息符号,通过此种标记,计算机之间可以处理包含各种信息的文章等。
     百度百科:用于标记电子文件使其具有结构性的标记语言,可以用来标记数据、定义数据类型,是一种允许用户对自己的标记语言进行定义的源语言。
    2个百科定义大同小异,个人偏向维基,XML设计用来传送及携带数据信息,这区别于HTMLHTML语言设计面向于数据表现。

用途:
      1、简化操作。Android便采用XML文件定义控件,将控件中各种属性集成,在程序开发中简化了源代码的编写。
      2、实现数据分离。使用HTML实现动态数据显示,是件十分麻烦的事,每次数据改变都需要花费大量时间修改HTMLXML的独立式数据文件存储的出现,给网页开发省下不少功夫,让HTML运用重点偏向于布局和显示。
      3、方便数据传输。不同系统间进行数据传送,经常会发生数据存储格式不兼容的问题,从而导致数据传送失败。XML的出现使不兼容问题成了历史,xml以纯文本格式存储数据,即使是不同系统,只要能进行xml解析,数据互送不是问题。
。。。
OK,因为本帖讲解的是android资源管理,XML知识只是个补充,就简单提交一下,如果有兴趣深入了解的道友可以去http://www.w3school.com.cn/x.asp学习,学习!w3school是个不错的学习网站!

好了,正式进入正题!
一、资源文件概述
1、资源存储
      Eclipse开发的每一个android项目都会有一个res目录跟一个assets目录,这些文件用于存储android程序资源。
      res目录下可新建一些固定名字的子文件,用于保存各类XML资源。Android提供了一个资源编译工具,它会按照事先约定的目录结构,把res目录下的文件按自动编译,并在gen目录下生成R.java文件,应用程序可以通过R.java对资源文件进行引用。
      assets目录比较少用,主要用于保存一些数据文件,与res目录下XML文件不同,assets文件保存的是一些二进制文件,这些文件并没有经过编译,访问时,需要通过字节流。
      SD卡,手机sd卡就相当于pc机中的硬盘,我们开发软件的时候,难免会引入一些较大的应用资源,如果贪方便全塞到resassets文件中,那恭喜你,你开发了一个空前绝后的龟速软件。Sd卡的出现使大储存软件开发成为可能。
     2、资源类型
     简单的概述,按资源文件类型划分,android资源可分为XML、图像和其他。如表:
Android支持的资源
目录
资源类型
描述
res\values
XML
保存字符串、颜色、尺度、类型、主题等资源,可以是任意文件名,对于字符、颜色、尺寸等信息采用key-value形式表示,对于资源、主题等资源,采用其他形式表示。
res\layout
XML
保存布局信息,一个资源文件表示一个ViewViewGroup的布局。
res\menu
XML
保存菜单资源。一个资源文件表示一个菜单(包括子菜单)
res\anim
XML
保存与动画相关信息。可以定义帧动画和补间动画
res\xml
XML
在该目录中文件可以是任意类型的XML文件,这些文件可以在运行时被读取。
res\raw
任意类型
在该目录中的文件虽然也会被封装在apk文件中,当不会被编译。该目录可以放各类型的文档、音频、视频文件。
res\drawable
图像
该目录中的文件可以是多种格式的图像文件,例如:bmppnggifjpg等。该目录中的图像对分辨率要求不是很高。Aapt工具会自动优化。
asets
任意文件
res\raw中资源一样,不会被编译,不同的是该目录中资源文件没有生成资源ID,可以自由操作。
二、资源定义及运用
      前面粗略介绍资源文件各类型,下面介绍各种资源的定义及运用:
1、简单的数值类资源
  
颜色资源
  
  
  
特性描述
  
定义格式
  
规定含有标准的XML文件头声明:<? Xml version=”1.0”  encoding=”utf-8”
  根节点使用<resources>,子项为<color>
  < rescources>
         <color name=”colcor_name”>#color_value</color>
  < /rescources>
  
存储路径
  
res/values/colors.xml  (命名任意,必须遵守一定规则)
  
类型匹配
  
R.color. color_name
  
资源引用
  
java引用:R.color.color_name
   int color =  getRescources.getColor(R.color.color_name)
   XML引用:@[package] color/color_name
  < TextView android:textColor=”@color/color_name”/>
  
备注
  
android允许将颜色值作为资源保存于资源文件中,规定颜色值必须以#开头,支持4种表示方式:
   #RGB    #ARGB    #RRGGBB   #AARRGGBB
   R、G、B 为三原色红、绿、蓝,A表示透明度,即lpha。A、R、G、B的取范围都是0—255,R、G、B值越大,颜色越深,如果都为0,表示颜色为黑色,都为255,表示白色。#RGB  #ARGB  跟#RRGGBB  #AARRGGBB的区别在于前者R、G、B的取值范围是0—15,颜色值跟透明度的8位字节的高四位和低4位相同,想表示更多颜色值,则需要使用后者。
  
字符串
  
  
  
特性描述
  
定义格式
  
规定含有标准的XML文件头声明:<? Xml  version=”1.0”  encoding=”utf-8”
  根节点使用<rescources>,资源声明使用<string>关键字
  <rescources>
       <string name=”string_name”>string_values</string>
  < /rescources>
  
存储路径
  
Res/values/strings.xml
  
类型匹配
  
对应java中的CharSequence
  
资源引用
  
Java引用: CharSequence   str = R.string.string_name
   XML引用:<TextView android:text=”@string/string_name”>


  
测量单位
  
  
  
特性描述
  
定义格式
  
规定含有标准的XML文件头声明:<? Xml  version=”1.0”  encoding=”utf-8”
  根节点使用<rescources>,资源声明使用<dimen>关键字
  <rescources>
       <dimen name=”dimen_name”>string_values</dimen  >
  < /rescources>
  
存储路径
  
Res/values/ dimens.xml
  
类型匹配
  
R.dimen.dimen_name   对应java中的float
  
资源引用
  
Java引用: float   dimen = Resources.getDimen(R.dimen.dimen_name)
  
XML引用:<TextView android:textSize=”@dimen/dimen_name>
  
备注
  
Android中已经定义了标准的度量单位:
  px:表示屏幕实际的像素。如:320*480表行向320个像素,纵向480
  in:表示英寸,是屏幕的物理尺寸,一英寸=2.53cm
   mm:表示毫米,屏幕的物理尺寸
  pt:表示一个点,是屏幕的物理尺寸,大小为1英寸的1/72
   dp:与密度无关的像素,这个是一个基于屏幕物理密度的抽象单位。
  sp:与比例无关的像素,跟dp类似。
2、可绘制类资源
  
点阵图像资源
  
  
  
特性描述
  
定义格式
  
.9.png 和png(最好),jpeg(一般), gif(尽量少用)
  
存储路径
  
Res/drawable/drawable_name.xml
  
类型匹配
  
R.drawable.drawable_name   对应java中的BitmapDrawable
  
资源引用
  
Java引用: R.drawable.some_file  不需要后缀名
  XML引用:<ImageView android:src=”@drawable/some_file”>
  
单色图像资源
  
  
  
特性描述
  
定义格式
  
规定含有标准的XML文件头声明:<? Xml  version=”1.0”  encoding=”utf-8”
  根节点使用<rescources>,资源声明使用<drawable>关键字
  <rescources>
       < drawable name=”color_name”>color_values</string>
  < /rescources>
  
存储路径
  
Res/drawable/colors.xml
  
类型匹配
  
R.drawable.some_name   对应java中的PaintDrawable
  
资源引用
  
Java引用: Drawable red =  Rescources.getDrawable(R.drawable.color_name);
   XML引用:<TextView android:background=”@drawable/color_name”>
  
可拉伸图像资源
  
  
  
特性描述
  
定义格式
  
file_name.9.png
  
存储路径
  
Res/drawable/file_name.9.pngl
  
类型匹配
  
   对应java中的NicePatchDrawable
  
资源引用
  
Java引用:R.drawable.some_name
   XML引用:@drawable/some_file
  
备注
  
该类图像时使用NinePatch工具制作出来的可拉伸图像资源,主要用于绘制一些背景框,比如按键。NinePatch图像的原理是把图像的4个拐角单独保存,然后定义一个像素内容填充,从而无论图像如何放大、缩小,都不会失真。

想猎鹰的狼!

8

主题

8

好友

281

积分

No.2 初级开发者

Rank: 2

升级  90.5%

精华
0
帖子
43
e币
1243 元
沙发
发表于 2012-3-6 13:17:40|只看该作者
本帖最后由 浪飞 于 2012-3-18 10:09 编辑

3、动画
  
动画
  
  
  

特性描述

  
定义格式
  

Xml文件,但不需要包含标准的XML文件头文件声明,即<?xml…>
  根节点可使用<alpha> <scale> <translate> <rotate>任何一种,如果动画包含多种变化,则需要使用<set>作为根节点

  
存储路径
  

Res/anim/anim_name.xml

  
类型匹配
  

对应java中的Animation

  
资源引用
  

Java引用:R.anim/anim_name  
   XML引用:@ anim/anim_name

  
备注
  

Android的animation由四种类型组成
  XML中
  
   
alpha

   
渐变透明度动画效果
   
   
scale
   
   
渐变尺寸伸缩动画效果
   
   
translate
   
   
画面转换位置移动动画效果
   
   
rotate
   
   
画面转移旋转动画效果
   
  
JavaCode中
  
   
AlphaAnimation
   
   
渐变透明度动画效果
   
   
ScaleAnimation
   
   
渐变尺寸伸缩动画效果
   
   
TranslateAnimation
   
   
画面转换位置移动动画效果
   
   
RotateAnimation
   
   
画面转移旋转动画效果
   
      

4、菜单
  
菜单
  
  
  

特性描述

  
定义格式
  

Xml文件,但不需要包含标准的XML文件头文件声明,即<?xml…>
  根节点可使用<menu>关键字,每个菜单项使用<item>关键字,对于菜单群组可以使用<group>关键字。

  
存储路径
  

Res/menu/some_file.xml

  
类型匹配
  

对应java中的Menu

  
资源引用
  

Java引用: R.menu.some_file
   XML引用:菜单不存在XML间引用


5、布局
  
布局
  
  
  

特性描述

  
定义格式
  

规定含有标准的XML文件头声明:<? Xml version=”1.0”  encoding=”utf-8”
  根节点使用任何ViewGroup的继承类,如<LinearLayout> <RelativeLayout> <FrameLayout>等。另外,在根节点内容内需要声明命名空间,比如:<LinearLayout:xmlns:android=“http//schemas./apk/res/android”>

  
存储路径
  

Res/layout/some_file.xml

  
类型匹配
  

对应java中的View

  
资源引用
  

Java引用: R.layout.some_file
   XML引用:@layout/some_file


  
自定义视图
  
  
  

特性描述

  
定义格式
  

在res/values/attr.xm文件中描述该视图的属性参数,不需要包含标准的XML文件头声明
  根节点使用<resources>关键字,次节点使用<declare-styleable=”class_name”>关键字,其中的name参数指定自定义视图的类名,次节点内部可添加具体的属性参数
  
<rescources>
        <declare-styleable name=”class_name”>
        <attr name=”rectColor” format=”  color”>
        <attr name=”height” format=” dimension”>
        <attr name=”rectColor” format=”color”>
        </declare-styleable>
  < rescources>

  
存储路径
  

res/layout/some_file.xml

  
类型匹配
  

对应java中取决于自定义属性的数据类型

  
资源引用
  

Java引用:R.styeable.someClass_attrName,somgClass是指自定义视图名称,attrName是自定义视图的属性参数名称。
  XML引用:不能在XML中引用,不过可以在自定义组件中添加自定义属性

  
备注
  

1、添加自定义属性
  <com.langfei.myView.CusRect
    xmlns:lang=”http://schemas./apk/res/com.langfei.myView”>
       android:layout_width=”50px”
       android:layout_height=”50px”
       lang:rectColor=”#ff000000”
  2、视图中属性类型,即format中的选值
  integer:整形数据,用于定义一些整形常量
  float :浮点数,用于定义一些float属性,如anim中的scale,rotate
   boolean:布尔值,true或false
   reference:可引用工程中其他资源的值,比如:@string/string_name
   string:字符类型
  dimension:长度单位,用于指定高度,或宽度
  color:颜色值


6、元数据文件资源
  
元数据文件资源
  
  
  

特性描述

  
定义格式
  

任意非XML文件

  
存储路径
  

res/raw/some_file

  
类型匹配
  

对应java中的io流

  
资源引用
  

Java引用: R..raw.some_file
   XML引用:无

  
备注
  

元数据文件(raw)是一种非XML格式的任意数据,资源编译器仅为元数据文件分配一个ID,要读取元数据文件,程序只能逐字节读取。与asset资源又有所不同,raw可以同个Resources.openRawRecource(R.raw.filename)直接访问。Assets要经过assets管理器访问。


7、样式
  
样式
  
  
  

特性描述

  
定义格式
  

规定含有标准的XML文件头声明:<?Xml version=”1.0” encoding=”utf-8”>
  <resources>为根节点使用<style name=”style_name”>关键字定义一个样式,样式名是style_name,样式中的每一项<item>关键字添加。
  < ?Xml version=”1.0”  encoding=”utf-8”>
     <rescources>
         <--parent属性指定其父样式,父样式只能有一个-->
        <style name=”langText” parent=”@style/Text”>
        <item name=”android:textSize”>20sp</item>
        <item name=”android:textColor”>#008</item>
        </style>
    </rescources>

  
存储路径
  

res/values/styles.xml  文件路径和文件名都是固定的

  
类型匹配
  

Java中不直接使用样式,样式仅在xml文件中引用,如果要在程序完成同样的工作,只能定义函数,该函数负责设置视图中的每一个具体的属性。

  
资源引用
  

Java引用:
  
XML引用:@[package]style/style_name,同一个项目中,package可以省略,如果要用android内部定义的样式,需要加上命名空间如:@android:style/android_style_name


8、主题
  
样式
  
  
  

特性描述

  
定义格式
  

跟样式定义相识,不同的是,主题包含的显示属性是针对Activity
  < ?Xml version=”1.0”  encoding=”utf-8”>
     <rescources>
        <style name=”Theme_name”>
        <item name=”android:windowNoTile”>true</item>
        <item name=”windowFrame”>@drawable/screen_frame</item>
        <item name=”windowBackground”>
                    @drawable/screen_background_white</item>
        <item name=”panelForegroundColor”>#FF000000</item>
        <item name=”panelTextColor”>?panelForegroundColor</item>
            …….
        </style>
    </rescources>
  此定义中,@符号和问号都代表引用,前者引用过的是其他地方定义的资源对象,而问号引用的是“运行时资源对象”

  
存储路径
  

res/values/styles.xml  与样式在同一个文件中

  
类型匹配
  

Java中没有对应获取样式和主题的方法。

  
资源引用
  

Java引用:
  setTheme(android:R.style.Theme_Light);
   setContentView(R.layout.layout_name)
   XML引用:在AndroidManifest.xml中引用
  <activity android:theme=”@android:style/Theme.Dialog”>


三、国际化
程序国际化,说白了,就是我们编写的程序全世界都能用,实现这目的,其中最重要一环是软件本地化,比如:汉化。Android中开发环境已经设计好一套框架,开发者只要遵循一定的规则,将相应的语言内容加入即可!
大家参看http://blog.csdn.net/stoneson/article/details/6089320这里吧,写得挺好。

靠,终于写完了,下一个帖将介绍android用户界面,敬请期待!

    本站是提供个人知识管理的网络存储空间,所有内容均由用户发布,不代表本站观点。请注意甄别内容中的联系方式、诱导购买等信息,谨防诈骗。如发现有害或侵权内容,请点击一键举报。
    转藏 分享 献花(0

    0条评论

    发表

    请遵守用户 评论公约

    类似文章 更多