作者:万境绝尘

转载请注明出处:http://blog.csdn.net/shulianghan/article/details/19913755

.



一. Android资源文件简介



1. Android应用资源的作用


(1) Android项目中文件分类


在Android工程中, 文件主要分为下面几类: 界面布局文件, Java src源文件, 资源文件;

--界面布局文件: 在res/layout-? 目录下定义, 用于定义Android中界面的显示样式;

--Java源码文件: Android程序的逻辑实现, 程序主体;

--资源文件: 各种XML文件, 可以定义图片等资源, 以及各种图片, 音频, 视频, 3d模型等资源;


(2) 资源文件作用


魔法数值: 在程序开发过程成, 需要用到很多常数, 如果在程序中直接使用这些数字, 给源码阅读和维护带来很多麻烦, 在重构领域我们将这些数值成为 Magical Number;


改进魔法数值: 为了改进魔法数值分散在程序各个地方, 可以专门定义存储魔法数值的接口, 在这些接口中以常量的形式定义一系列的魔法数值, 这些常量名称都是容易理解的, 如果逻辑复杂的数值可以使用注释进行解析, 这样能大大提高程序的 可读性 和 可维护性;


使用资源存放字符串,数字常量: Android中可以将 字符串 数值 存放到资源文件中, res 目录中可以定义字符串资源(values/string.xml),颜色资源,数组资源,菜单资源等, 在Java代码中可以直接获取这些资源中的值;


2. Android中资源分类详解


(1)Android资源分类


Android中的资源分为两大类: 可直接访问的资源, 无法直接访问的原生资源;

--直接访问资源: 这些资源可以使用 R. 进行访问, 都保存在res目录下, 在编译的时候, 会自动生成R.java 资源索引文件;

--原生资源: 这些资源存放在assets下, 不能使用 R类 进行访问, 只能通过 AssetManager 以二进制流形式读取资源;


(2) Android资源详解


res目录下资源详解:

--res/animator:属性动画的XML文件目录, 属性动画就是定义起始结束, 动做, 重复时间等参数齐全的动画;

--res/anim:补间动画的XML文件目录, 补间动画是只定义 起始 结束帧, 中间的动作由系统进行计算获取动作过程;

--res/color:颜色列表的XML文件目录;

--res/drawable: 存放真实的位图文件, 也可以存放Drawable对象及子类对象的XML文件;

--res/layout: 界面布局文件目录;

--res/menu: 程序中使用的菜单文件目录, 该文件下的XML文件可以应用与 选项菜单, 子菜单, 上下文菜单等;

--res/raw: 存放原生资源, 与assets目录作用相同, 可以通过调用openRawResource(int)方法获取二进制输入流, 与asstes相似, 使用AssetsManager访问这些资源;

--res/value: 存放 字符串. 整数, 颜色, 数组 信息的 XML文件的目录, 这些XML文件资源的根元素是resource;

--res/xml: 原生的XML文件, 可以使用 Resource.getXML()方法进行访问;


res/value目录XML文件<resource>子标签解析:

--string标签: 代表一个字符串;

--integer标签: 代表一个整数值标签;

--bool标签: 代表一个boolean值;

--color标签: 代表一个颜色值;

--array标签: 代表数组;

--string-array标签: 代表字符串数组;

--int-array标签: 代表int数组;

--style标签: 代表样式;

--dimen标签: 代表一个尺寸;


分类资源文件: 如果将所有的资源放到一个XML文件中, 会增加维护难度, 这里将不通类型的资源放到不同的XML文件下;

--arrays.xml: 存放数组资源;

--colors.xml: 存放颜色资源;

--dimens.xml: 存放尺寸值资源;

--strings.xml: 存放字符串资源;

--styles.xml: 存放样式资源;


3. Android中资源的使用


(1) Java代码访问清单资源


在Java代码中通过R类获取资源语法:

[plain] view plain copy
  1. [packageName.]R.resourceType.resourceName

-- pakegeName : R类所在的包名, 即权限定类型, R类可能来自两个包, 一个是程序本身的清单文件, 一个是Android系统存在的清单文件;

--resourceType: R类中代表的资源类型的名称, R.string 字符串资源, R.integer 代表整数资源;

--resourceName: 资源名称, 这个资源名称是对应类型子标签的 name属性的值;


(2) Java代码访问原生资源


Resource类: Android资源访问控制类, 该类提供了大量方法获取实际资源,Resource通过 Context.getResource()方法获得;

--获取清单资源:resource.getString(id), 根据id获取实际资源;

--获取原生资源:resource.getassets(), 获取AssetManager对象;

[java] view plain copy
  1. //获取Resource资源,这个方法在Activity中执行
  2. Resourcesresources=getResources();
  3. //获取字符串资源
  4. Stringhello=resources.getString(R.string.hello_world);
  5. //获取图片资源
  6. Drawableluncher=resources.getDrawable(R.drawable.ic_launcher);

(3) XML文件中使用资源


在XML文件中需要引用其它XML文件中的值, 语法格式为:

[html] view plain copy
  1. @[packageName:]resourceType/resourceName

-- packageName : 资源类型所在的包, 如果被引用资源 与 本XML文件在同一个包下, 可以省略包名;

--resourceType: 资源类型, 例如 layout, drawable, strings等;

--resourceName: 资源名称, 资源所在的XML文件中元素的 android:name 属性, 或者 是无后缀的文件名, 例如图片, 布局文件等;


示例:

--源文件:

[html] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <resources>
  3. <stringname="app_name">ResourceTest</string>
  4. <stringname="action_settings">Settings</string>
  5. <stringname="hello_world">Helloworld!</string>
  6. <colorname="red">#FF4000</color>
  7. </resources>

-- 引用文件 :

[html] view plain copy
  1. <TextView
  2. android:layout_width="wrap_content"
  3. android:layout_height="wrap_content"
  4. android:text="@string/hello_world"
  5. android:textColor="@color/red"/>


二. Android 字符串 颜色 尺寸资源



1. 字符串 颜色 尺寸资源文件简介


(1) 几种资源的目录引用名称


字符串资源:

--默认目录: /res/values/strings.xml;

--引用方式: R.string.xxx ;


颜色资源:

--默认目录: /res/values/colors.xml;

--引用方式: R.color.xxx ;


尺寸资源:

--默认目录: /res/values/dimens.xml;

--引用方式: R.dimens.xxx ;


(2) 颜色定义方式


三原色: 白光 可以分解为 红, 绿, 蓝 三种颜色的光, 红绿蓝都是最大值的时候就是白色, 三种值相等, 但不是最大值是灰色, 如果其中一种或两种值比较大, 就会产生各种颜色的彩色;


颜色表示: 颜色通过红(red) 绿(green) 蓝(blue)三种颜色, 以及透明度(alpha)来表示的;

--颜色开头: 颜色值总是以 # 开头;

--无透明度: 如果没有 alpha 值, 默认完全不透明;


颜色定义形式:

--#RGB: 红 绿 蓝 三原色值, 每个值分16个等级, 最小为0, 最大为f;

--#ARGB: 透明度 红 绿 蓝 值, 每个值分16个等级, 最小为0, 最大为f;

--#RRGGBB: 红 绿 蓝 三原色值, 每个值分 256个等级, 最小为0, 最大为ff;

--#AARRGGBB: 透明度 红 绿 蓝 值, 每个值分 256个等级, 最小为0, 最大为ff;



2. 字符串 颜色 尺寸 XML文件定义


(1) 字符串资源文件


字符串资源文件信息:

--资源位置: /res/values 目录下;

--根元素: <resource>是根元素;

--子元素: <string />;

--name属性: 指定变量名称;

--标签文本: 标签文本就是字符串信息;


示例:

[html] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <resources>
  3. <stringname="app_name">ResourceTest</string>
  4. <stringname="action_settings">Settings</string>
  5. <stringname="hello_world">Helloworld!</string>
  6. </resources>


(2) 颜色资源文件


颜色资源文件信息:

--位置: /res/values目录;

--根元素: <resource>;

--子元素: <string>;

--name属性: 颜色资源名称;

--标签文本: 颜色值;


示例:

[html] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <resources>
  3. <colorname="red">#FF4000</color>
  4. <colorname="black">#120A2A</color>
  5. <colorname="green">#00FF00</color>
  6. <colorname="yellow">#FFFF00</color>
  7. </resources>


(3) 尺寸资源文件


尺寸资源信息:

--位置: /res/values目录;

--根元素: <resource>;

--子元素: <dimen>;

--name属性: 尺寸名称;

--标签文本: 尺寸值;


示例:

[html] view plain copy
  1. <resources>
  2. <!--Defaultscreenmargins,pertheAndroidDesignguidelines.-->
  3. <dimenname="activity_horizontal_margin">16dp</dimen>
  4. <dimenname="activity_vertical_margin">16dp</dimen>
  5. </resources>


3. 使用字符串 颜色 尺寸资源


(1) 使用示例


颜色资源:

[html] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <resources>
  3. <colorname="red">#FF4000</color>
  4. <colorname="black">#120A2A</color>
  5. <colorname="green">#00FF00</color>
  6. <colorname="yellow">#FFFF00</color>
  7. </resources>

尺寸资源 :

[html] view plain copy
  1. <resources>
  2. <!--Defaultscreenmargins,pertheAndroidDesignguidelines.-->
  3. <dimenname="activity_horizontal_margin">16dp</dimen>
  4. <dimenname="activity_vertical_margin">16dp</dimen>
  5. </resources>

字符串资源 :

[html] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <resources>
  3. <stringname="app_name">ResourceTest</string>
  4. <stringname="action_settings">Settings</string>
  5. <stringname="hello_world">Helloworld!</string>
  6. </resources>

布局文件 : 在这个文件中调用上面三个资源文件内容;

[html] view plain copy
  1. <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:paddingBottom="@dimen/activity_vertical_margin"
  6. android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. android:paddingTop="@dimen/activity_vertical_margin"
  9. tools:context=".MainActivity">
  10. <TextView
  11. android:layout_width="wrap_content"
  12. android:layout_height="wrap_content"
  13. android:text="@string/hello_world"
  14. android:textColor="@color/green"/>
  15. </RelativeLayout>


效果图 :

Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值 数组_第1张图片






三. 整数 布尔值 资源文件


1. 整数资源


整型资源:

-- XML文件常用路径: /res/values/integer.xml;

-- 根标签: <resource> ;

-- 子元素: <integer> ;


整型资源调用 :

-- XML中调用: @ [packageName] : integer / integerName ;

-- Java中调用: [packageName . ]R.integer.integerName ;


示例: /res/values/integer.xml ;

[html] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <resources>
  3. <integername="size_1">10</integer>
  4. <integername="size_2">20</integer>
  5. </resources>

Java代码 :

[java] view plain copy
  1. packageshuliang.han.resourcetest;
  2. importandroid.app.Activity;
  3. importandroid.content.res.Resources;
  4. importandroid.os.Bundle;
  5. publicclassMainActivityextendsActivity{
  6. @Override
  7. protectedvoidonCreate(BundlesavedInstanceState){
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.activity_main);
  10. //获取Resource资源,这个方法在Activity中执行
  11. Resourcesresources=getResources();
  12. intsize_1=resources.getInteger(R.integer.size_1);
  13. System.out.println(size_1);
  14. }
  15. }

执行结果:

[plain] view plain copy
  1. 02-2620:12:51.586:I/System.out(18744):10


2. 布尔资源


布尔资源信息:

--常用文件: /res/values/bool.xml 文件;

--跟标签: <resource>;

--子标签: <bool> ;


布尔资源调用:

--XML文件中调用: @ [packageName :] bool / boolName ;

--Java代码中调用: [packageName . ]R.bool.boolName ;


示例:

[html] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <resources>
  3. <boolname="is_true">true</bool>
  4. <boolname="is_false">false</bool>
  5. </resources>

Java代码 :

[java] view plain copy
  1. packageshuliang.han.resourcetest;
  2. importandroid.app.Activity;
  3. importandroid.content.res.Resources;
  4. importandroid.os.Bundle;
  5. publicclassMainActivityextendsActivity{
  6. @Override
  7. protectedvoidonCreate(BundlesavedInstanceState){
  8. super.onCreate(savedInstanceState);
  9. setContentView(R.layout.activity_main);
  10. //获取Resource资源,这个方法在Activity中执行
  11. Resourcesresources=getResources();
  12. booleanis_true=resources.getBoolean(R.bool.is_true);
  13. System.out.println(is_true);
  14. }
  15. }

执行结果 :

[plain] view plain copy
  1. 02-2620:27:15.676:I/System.out(31060):true



四. 数组资源



1. 数组资源简介


资源数组文件: 通常将数组定义在 /res/values/arrays.xml文件中;

--根标签: <resources> ;

--子标签: <array>, <string-array>, <integer-array>;


资源数组类型: 数组的资源的跟标签都是 <resources>, 不同类型的数组的子元素不同;

--普通类型数组: 使用<array>作为子元素标签;

--字符串数组: 使用<string-array>作为子元素标签;

--整数数组: 使用<integer-array>作为子元素标签;


XML文件中调用数组资源: @ [packageName :] array/arrayName ;


Java文件中调用数组资源: [packageName . ]R.array.arrayName ;

--获取实际普通数组: TypeArray obtainTypedArray(int id), 根据普通数组资源名称获取实际普通数组, TypeArray类提供了getXxx(int index)方法获取指定索引的元素;

--获取字符串数组: String[] getStringArray(int id), 根据字符串数组资源名称获取字符串数组;

--获取整数数组: int[] getIntArray(int id), 根据整数数组资源名称获取实际的整数数组;



2. 实际案例


GitHub地址:

--HTTP:https://github.com/han1202012/ResourceTest.git

--SSH:git@github.com:han1202012/ResourceTest.git


数组资源文件:

[html] view plain copy
  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <resources>
  3. <arrayname="color_array">
  4. <item>@color/black</item>
  5. <item>@color/green</item>
  6. <item>@color/red</item>
  7. <item>@color/yellow</item>
  8. </array>
  9. <string-arrayname="string_array">
  10. <item>三星</item>
  11. <item>小米</item>
  12. <item>苹果</item>
  13. </string-array>
  14. <integer-arrayname="integer_array">
  15. <item>1</item>
  16. <item>2</item>
  17. <item>3</item>
  18. <item>4</item>
  19. </integer-array>
  20. </resources>

布局文件 :

[html] view plain copy
  1. <RelativeLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  2. xmlns:tools="http://schemas.android.com/tools"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent"
  5. android:paddingBottom="@dimen/activity_vertical_margin"
  6. android:paddingLeft="@dimen/activity_horizontal_margin"
  7. android:paddingRight="@dimen/activity_horizontal_margin"
  8. android:paddingTop="@dimen/activity_vertical_margin"
  9. tools:context=".MainActivity">
  10. <ListView
  11. android:id="@+id/lv"
  12. android:layout_width="fill_parent"
  13. android:layout_height="wrap_content"/>
  14. </RelativeLayout>

Java代码 :

[java] view plain copy
  1. packageshuliang.han.resourcetest;
  2. importandroid.app.Activity;
  3. importandroid.content.res.Resources;
  4. importandroid.content.res.TypedArray;
  5. importandroid.os.Bundle;
  6. importandroid.view.View;
  7. importandroid.view.ViewGroup;
  8. importandroid.widget.BaseAdapter;
  9. importandroid.widget.ListView;
  10. importandroid.widget.TextView;
  11. publicclassMainActivityextendsActivity{
  12. privateString[]array_string;
  13. privateint[]array_int;
  14. privateTypedArraycolors;
  15. privateListViewlistView;
  16. privateResourcesres;
  17. @Override
  18. protectedvoidonCreate(BundlesavedInstanceState){
  19. super.onCreate(savedInstanceState);
  20. setContentView(R.layout.activity_main);
  21. //获取resource对象
  22. res=getResources();
  23. //获取字符串资源
  24. array_string=res.getStringArray(R.array.string_array);
  25. //获取整数数组资源
  26. array_int=res.getIntArray(R.array.integer_array);
  27. //获取颜色资源
  28. colors=res.obtainTypedArray(R.array.color_array);
  29. listView=(ListView)findViewById(R.id.lv);
  30. listView.setAdapter(newMyBaseAdapter());
  31. }
  32. /*
  33. *ListView适配器
  34. */
  35. classMyBaseAdapterextendsBaseAdapter{
  36. @Override
  37. publicintgetCount(){
  38. returnarray_string.length;
  39. }
  40. @Override
  41. publicObjectgetItem(intposition){
  42. returnarray_string[position];
  43. }
  44. @Override
  45. publiclonggetItemId(intposition){
  46. returnposition;
  47. }
  48. @Override
  49. publicViewgetView(intposition,ViewconvertView,ViewGroupparent){
  50. //创建TextView,并设置宽高
  51. TextViewtextView=newTextView(getApplicationContext());
  52. textView.setHeight((int)res.getDimension(R.dimen.tv_height));
  53. textView.setWidth((int)res.getDimension(R.dimen.tv_width));
  54. //为TextView设置文本
  55. textView.setText(array_int[position]+"."+array_string[position]);
  56. //设置TextView的背景字体
  57. textView.setBackgroundDrawable(colors.getDrawable(position));
  58. textView.setTextSize(20);
  59. returntextView;
  60. }
  61. }
  62. }

效果图 :

Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值 数组_第2张图片


.

作者:万境绝尘

转载请注明出处:http://blog.csdn.net/shulianghan/article/details/19913755

更多相关文章

  1. Android如何使用so文件和Android studio中导入so
  2. android读取plist文件
  3. 在Android中把SQLite的数据库文件存储在SD卡中【转】
  4. 使用Android自带的DownloadManager下载文件
  5. android 获取.thumbnail文件下的小图标
  6. Android--用Pull解析器将对象解析成xml文件及单元测试
  7. android 反射解析xml文件成为java对象
  8. android 9.png 文件
  9. Android TXT文件读写

随机推荐

  1. 【幻灯片分享】和Android源代码一起工作
  2. 给Android开发者的一封信
  3. Android实习周记:第一周,井底之蛙上岸
  4. Cygwin的安装流程
  5. Android(安卓)Studio 将github作为远程ma
  6. Android(安卓)launcher动态Icon的实现方
  7. android 如何用wireshark抓取模拟器的包
  8. Android(安卓)项目中图片压缩看我的blog
  9. 防止Android过快点击造成多次事件的三种
  10. Android(安卓)Studio 项目 Gradle 升级经