- Android应用的源代码分为3类:
- xml
- Java代码
- 资源文件
- 资源文件主要是提高代码的可维护性
- 资源文件有字符串资源、颜色资源、数组资源、菜单资源等都集中在放在res中
- assets也存放部分资源,需要通过AssetManager以二进制流的形式访问
一、 应用资源概述
- assert:无法通过R资源菜单访问
- res:可以通过R资源菜单访问
1. 资源的类型和存储方式
- P290 表6.1
2. 使用资源
- Java代码中使用资源清单项
- [package_name].R.[resource_type].[resource_name]
- 在Java代码中访问实际资源
- getXxx(int id)
- getAsserts()
- 在xml文件中使用资源
- 直接引用资源
二、字符串、颜色、尺寸资源
1. 颜色值的定义
- Alpha-Red-Green-Blue,Alpha值可以省略
2. 定义字符串、颜色、尺寸资源文件
- 字符串资源文件位于values目录下,根元素为resource…,该元素里每个子元素string定义一个字符串常量,name值指定常量的名称,标签之间的内容代表字符串值
<?xml version="1.0" encoding="utf-8"?>
<resources>
<string name="app_name">字符串、颜色、尺寸资源</string>
<string name="c1">F00</string>
<string name="c2">0F0</string>
<string name="c3">00F</string>
<string name="c4">0FF</string>
<string name="c5">F0F</string>
<string name="c6">FF0</string>
<string name="c7">07F</string>
<string name="c8">70F</string>
<string name="c9">F70</string>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<color name="c1">#F00</color>
<color name="c2">#0F0</color>
<color name="c3">#00F</color>
<color name="c4">#0FF</color>
<color name="c5">#F0F</color>
<color name="c6">#FF0</color>
<color name="c7">#07F</color>
<color name="c8">#70F</color>
<color name="c9">#F70</color>
</resources>
<?xml version="1.0" encoding="utf-8"?>
<resources>
<dimen name="spacing">8dp</dimen>
<!-- 定义GridView组件中每个单元格的宽度、高度 -->
<dimen name="cell_width">60dp</dimen>
<dimen name="cell_height">66dp</dimen>
<!-- 定义主程序的标题的字体大小 -->
<dimen name="title_font_size">18sp</dimen>
</resources>
3. 使用字符串、颜色、尺寸资源
- @[resource_type]/[resource_name]
- R.[resource_type]/[resource_name]
三、Array资源
- 位于values目录下的arrays.xml中,根元素为resource,该元素内包含如下三种子元素
- array…
- string-array…
- interger-array…
- 访问资源:
- R.array.array_name
- @array/array_name
- Resource 提供的方法
- String[] getStringArray(int id)
- int[] getIntArray(int id)
- TypedArray obtain TypedArray(int id)
四、使用Drawable资源
1. 图片资源
- 直接把png、jpg、gif、放在drawable中
2. StateListDrawable资源
- 主要用来组织多个Drawable对象,随状态改变而改变
- 根元素为selector,子元素为item
<?xml version="1.0" encoding="UTF-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 指定获得焦点时的颜色 -->
<item android:state_focused="true"
android:color="#f44"/>
<!-- 指定失去焦点时的颜色 -->
<item android:state_focused="false"
android:color="#ccf"/>
</selector>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- 使用StateListDrawable资源 -->
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@drawable/my_image"/>
<EditText
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:textColor="@drawable/my_image"/>
</LinearLayout>
3. LayerDrawable 资源
- Drawable对象的数组顺序来绘制,索引最大的会被绘制在最上面
- 根元素为layer-list…,子元素为item
4. ShapeDrawable 资源
- 主要用来绘制几何图形,根元素为shape
- rectangle
- oval
- ring
- line
5. ClipDrawable资源
- 主要从其他位图上截取一个图片片段,根元素为clip
- drawable:指定截取的源Drawable对象
- clipOrientation:指定截取的方向,水平截取或垂直截取
- gravity:指定截取时的对齐方式
- setLevel()控制截取图片的部分
6. AnimationDrawable资源
- 可以用在补间动画方面
- 能满足View进行移动、缩放、旋转和淡入淡出的操作,超出此范围要用属性动画
- 定义补间动画以set作为根节点
- alpha
- scale
- translate
- rotate
- 补间动画只需要设置开始状态和结束状态,android自动调用动画效果
- interpolator属性用在调节动画速度方面
- linear_interpolator:匀速变换
- accelerate_interpolator:加速变换
- decelerate_interpolator:减速变换
五、属性动画资源
- < set/…>是个父元素,包含着
- < objectAnimator…/>:用于定义ObjectAnimator动画
- < animator…/>:用于定义ValueAnimator动画
<?xml version="1.0" encoding="utf-8"?>
<objectAnimator xmlns:android="http://schemas.android.com/apk/res/android"
android:propertyName="backgroundColor"
android:duration="3000"
android:valueFrom="#FF8080"
android:valueTo="#8080FF"
android:repeatCount="infinite"
android:repeatMode="reverse"
android:valueType="intType">
</objectAnimator>
public class MyAnimationView extends View
{
public MyAnimationView(Context context)
{
super(context);
// 加载动画资源
ObjectAnimator colorAnim = (ObjectAnimator) AnimatorInflater
.loadAnimator(MainActivity.this, R.animator.color_anim);
colorAnim.setEvaluator(new ArgbEvaluator());
// 对该View本身应用属性动画
colorAnim.setTarget(this);
// 开始指定动画
colorAnim.start();
}
}
六、使用原始xml资源
1.定义原始xml资源
获取方式:
xml中: xml/file_name
Java代码中:
R.xml.filename
- XmlResourceParser getXml(int id)
- InputStream openRawResource(int id)