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>是根元素;

-- 子元素 : <string />;

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

-- 子元素 : <color>;

-- 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 { @Override
protected 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);
}
}

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 { @Override
protected 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);
}
}

四. 数组资源

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), 根据整数数组资源名称获取实际的整数数组;

Android资源文件简介的更多相关文章

  1. 【Android 应用开发】Android资源文件 - 使用资源存储字符串 颜色 尺寸 整型 布尔值 数组

    . 作者 : 万境绝尘 转载请注明出处 : http://blog.csdn.net/shulianghan/article/details/19913755 . 一. Android资源文件简介 1 ...

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

    一. Android资源文件简介 1. Android应用资源的作用 (1) Android项目中文件分类 在Android工程中, 文件主要分为下面几类 : 界面布局文件, Java src源文件, ...

  3. Android资源文件说明

    一. Android资源文件简介 1. Android应用资源的作用 (1) Android项目中文件分类 在Android工程中, 文件主要分为下面几类 : 界面布局文件, Java src源文件, ...

  4. 【转】关于Android资源文件中出现百分号的问题

    关于Android资源文件中出现百分号的问题 分类: Android JAVA2014-08-01 16:53 1345人阅读 评论(0) 收藏 举报 ANDROID格式化资源文件   目录(?)[+ ...

  5. ANDROID资源文件【转】

    1.  资源包括:文本字符串.图像和图标.音频文件.视频和其他应用程序使用的组件. 2.  在Android工程中,Android资源文件是同Java类文件分开存储的,大多数常见的资源类型存储在XML ...

  6. Android 资源文件命名与使用

    [推荐]资源文件需带模块前缀 [推荐]layout 文件的命名方式 Activity 的 layout 以 module_activity 开头 Fragment 的 layout 以 module_ ...

  7. android 资源文件

    系统文档:http://developer.android.com/guide/topics/resources/available-resources.html 1. 系统下资源文件夹的名字是固定的 ...

  8. [置顶] Android资源文件分析

    1)修改开机默认壁纸 Android开机默认资源文件为:frameworks/base/core/res/res/values/config.xml 我们找到wallpaper行: <strin ...

  9. 003.android资源文件剖析(Resources)

    android的资源文件使用的重要性,不言而喻.让我们从潜到深逐渐来了解吧. 一:android的基本资源: 1.字符串资源 android的资源文件保存在:res\values\ 2.布局资源 an ...

随机推荐

  1. 安装了多个Oracle11g的客户端,哪个客户端的tnsnames.ora会起作用?

    如果我们由于需要安装了多个Oracle的client,哪个客户端的tnsnames.ora会起作用呢? 答案是: 在安装好clinent端后,安装程序会把client的bin目录放到path里面,pa ...

  2. Raspberry pi之树莓派基础建设-2

    1.ssh pi与本地文件传输   一般ssh是默认会支持sftp的,所以你可以考虑用filezila之类的ftp工具远程连接登陆 2.我考虑到要拍照,前提是你得有个摄像头,usb直接插上去 3.py ...

  3. openwrt编译环境搭建

    1,首先安装ubuntu系统,这里安装的是虚拟机 2,安装openwrt编译所需环境  apt-get install build-essential libncures5-dev gawk libs ...

  4. iOS开发 GET、POST请求方法(NSURLConnection篇)

    Web Service使用的主要协议是HTTP协议,即超文本传输协议. HTTP/1.1协议共定义了8种请求方法(OPTIONS.HEAD.GET.POST.PUT.DELETE.TRACE.CONN ...

  5. TabLayout 简单使用。

    先上效果图 在使用TabLayout 之前需要导入design包. 我使用的是android studio 只要在build.gradle中加入 compile 'com.android.suppor ...

  6. winFrom 常用控件属性及方法介绍

    目录 1.窗体(Form) 2.Label (标签)控件 3.TextBox(文本框)控件 4.RichTextBox控件 5.NumericUpDown控件 6.Button(按钮)控件 7.Gro ...

  7. Samba日志分析

    Samba日志分析 随着我们文件共享安全级别的提高,越来越多的情况下需要对日志进行记录并审计.Linux平台下的Samba服务的配置文件是smb.conf,有不少图形化配置工具例如Webmin.smb ...

  8. nginx 配置全站404(百度闭站保护)

    在百度站长里申请闭站保护时,需要全站404.可能过nginx配置实现 location / {   #root html;   #index index.html index.htm;   retur ...

  9. spring3 项目更新

    列志华 (组长) http://www.cnblogs.com/liezhihua/ 团队guihub https://github.com/LWHTF/OrderingFood 黄柏堂 http:/ ...

  10. Django URL的命令空间

    为避免在模板中使用URL的硬编码,可以使用{% url %}模板标签来解决 <li><a href="/task/{{ task.id }}/">{{ ta ...