.

作者 : 万境绝尘

转载请注明出处 :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类获取资源语法 :

[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对象;

//获取Resource资源, 这个方法在Activity中执行Resources resources = getResources();//获取字符串资源String hello = resources.getString(R.string.hello_world);//获取图片资源Drawable luncher = resources.getDrawable(R.drawable.ic_launcher);

(3) XML文件中使用资源


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

@ [packageName : ] resourceType / resourceName 

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

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

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


示例 :

-- 源文件 :

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">ResourceTest</string>    <string name="action_settings">Settings</string>    <string name="hello_world">Hello world!</string>    <color name="red">#FF4000</color></resources>

-- 引用文件 :

<TextView        android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/hello_world"         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>是根元素;

-- 子元素 : <color />;

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

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


示例 :

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">ResourceTest</string>    <string name="action_settings">Settings</string>    <string name="hello_world">Hello world!</string></resources>


(2) 颜色资源文件


颜色资源文件信息 :

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

-- 根元素 : <resource>;

-- 子元素 : <string>;

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

-- 标签文本 : 颜色值;


示例 :

<?xml version="1.0" encoding="utf-8"?><resources>    <color name = "red">#FF4000</color>    <color name = "black">#120A2A</color>    <color name = "green">#00FF00</color>    <color name = "yellow">#FFFF00</color></resources>


(3) 尺寸资源文件


尺寸资源信息 :

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

-- 根元素 : <resource>;

-- 子元素 : <dimen>;

-- name属性 : 尺寸名称;

-- 标签文本 : 尺寸值;


示例 :

<resources>    <!-- Default screen margins, per the Android Design guidelines. -->    <dimen name="activity_horizontal_margin">16dp</dimen>    <dimen name="activity_vertical_margin">16dp</dimen></resources>


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


(1) 使用示例


颜色资源 :

<?xml version="1.0" encoding="utf-8"?><resources>    <color name = "red">#FF4000</color>    <color name = "black">#120A2A</color>    <color name = "green">#00FF00</color>    <color name = "yellow">#FFFF00</color></resources>

尺寸资源 :

<resources>    <!-- Default screen margins, per the Android Design guidelines. -->    <dimen name="activity_horizontal_margin">16dp</dimen>    <dimen name="activity_vertical_margin">16dp</dimen></resources>

字符串资源 :

<?xml version="1.0" encoding="utf-8"?><resources>    <string name="app_name">ResourceTest</string>    <string name="action_settings">Settings</string>    <string name="hello_world">Hello world!</string></resources>

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

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <TextView         android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="@string/hello_world"        android:textColor="@color/green" /></RelativeLayout>


效果图 :







三. 整数 布尔值 资源文件


1. 整数资源


整型资源 :

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

-- 根标签 : <resource> ;

-- 子元素 : <integer> ;


整型资源调用 :

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

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


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

<?xml version="1.0" encoding="utf-8"?><resources>    <integer name = "size_1">10</integer>    <integer name = "size_2">20</integer></resources>

Java代码 :

package shuliang.han.resourcetest;import android.app.Activity;import android.content.res.Resources;import android.os.Bundle;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取Resource资源, 这个方法在Activity中执行Resources resources = getResources();int size_1 = resources.getInteger(R.integer.size_1);System.out.println(size_1);}}

执行结果 :

02-26 20:12:51.586: I/System.out(18744): 10


2. 布尔资源


布尔资源信息 :

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

-- 跟标签 : <resource>;

-- 子标签 : <bool> ;


布尔资源调用 :

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

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


示例 :

<?xml version="1.0" encoding="utf-8"?><resources>    <bool name = "is_true">true</bool>    <bool name = "is_false">false</bool></resources>

Java代码 :

package shuliang.han.resourcetest;import android.app.Activity;import android.content.res.Resources;import android.os.Bundle;public class MainActivity extends Activity {@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取Resource资源, 这个方法在Activity中执行Resources resources = getResources();boolean is_true = resources.getBoolean(R.bool.is_true);System.out.println(is_true);}}

执行结果 :

02-26 20: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


数组资源文件 :

<?xml version="1.0" encoding="utf-8"?><resources>    <array name = "color_array">        <item>@color/black</item>        <item>@color/green</item>        <item>@color/red</item>        <item>@color/yellow</item>    </array>        <string-array name = "string_array">        <item>三星</item>        <item>小米</item>        <item>苹果</item>    </string-array>        <integer-array name = "integer_array">        <item>1</item>        <item>2</item>        <item>3</item>        <item>4</item>    </integer-array></resources>

布局文件 :

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"    xmlns:tools="http://schemas.android.com/tools"    android:layout_width="match_parent"    android:layout_height="match_parent"    android:paddingBottom="@dimen/activity_vertical_margin"    android:paddingLeft="@dimen/activity_horizontal_margin"    android:paddingRight="@dimen/activity_horizontal_margin"    android:paddingTop="@dimen/activity_vertical_margin"    tools:context=".MainActivity" >    <ListView         android:id="@+id/lv"        android:layout_width="fill_parent"        android:layout_height="wrap_content"/></RelativeLayout>

Java代码 :

package shuliang.han.resourcetest;import android.app.Activity;import android.content.res.Resources;import android.content.res.TypedArray;import android.os.Bundle;import android.view.View;import android.view.ViewGroup;import android.widget.BaseAdapter;import android.widget.ListView;import android.widget.TextView;public class MainActivity extends Activity {private String[] array_string;private int[] array_int;private TypedArray colors;private ListView listView;private Resources res;@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//获取resource对象res = getResources();//获取字符串资源array_string = res.getStringArray(R.array.string_array);//获取整数数组资源array_int = res.getIntArray(R.array.integer_array);//获取颜色资源colors = res.obtainTypedArray(R.array.color_array);listView = (ListView) findViewById(R.id.lv);listView.setAdapter(new MyBaseAdapter());}/* * ListView适配器 */class MyBaseAdapter extends BaseAdapter{@Overridepublic int getCount() {return array_string.length;}@Overridepublic Object getItem(int position) {return array_string[position];}@Overridepublic long getItemId(int position) {return position;}@Overridepublic View getView(int position, View convertView, ViewGroup parent) {//创建TextView, 并设置宽高TextView textView = new TextView(getApplicationContext());textView.setHeight((int) res.getDimension(R.dimen.tv_height));textView.setWidth((int) res.getDimension(R.dimen.tv_width));//为TextView设置文本textView.setText(array_int[position] + ". " + array_string[position]);//设置TextView的背景 字体textView.setBackgroundDrawable(colors.getDrawable(position));textView.setTextSize(20);return textView;}}}

效果图 :



.

作者:万境绝尘

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

.

更多相关文章

  1. 【Android开发教程】一、基础概念
  2. Android(安卓)—— 第一次安装 Android(安卓)Studio 启动时出现
  3. Android(安卓)属性文件build.prop,获取属性以及设置属性
  4. android 布局文件属性说明
  5. android 问题总结
  6. Android(安卓)studio上设置状态栏为透明 Android5.0
  7. Android获取打开各种文件Intent汇总
  8. 常用的android权限配置和常用工具代码
  9. GridView九宫图

随机推荐

  1. Android访问WCF服务
  2. Android 体系结构
  3. Android(安卓)Serializable与Parcelable
  4. Android毛玻璃效果
  5. Android(安卓)Lint分类及常见错误
  6. Frame Animation帧播放动画
  7. ContentProvider使用与query流程分析
  8. android 程序中运行main方法
  9. Android开发实现计算器的例子
  10. android 学习网站