android资源文件

转自http://www.cnblogs.com/xirihanlin/archive/2010/06/14/1758145.html

Drawable 资源是对图像的一个抽象,你可以通过 getDrawable(int) 得到并绘制到屏幕上。这里有几种不同类型的 Drawable

 

Bitmap File

    一个 Bitmap 图像文件( .png .jpg .gif )。 BitmapDrawable

Nine-Patch File

    一个带有伸缩区域的 PNG 文件,可以基于 content 伸缩图片( .9.png )。 NinePatchDrawable

State List

    一个 XML 文件,为不同的状态引用不同的 Bitmap 图像(例如,当按钮按下时使用不同的图片)。 StateListDrawable

Color

    定义在 XML 中的资源,指定一个矩形(圆角可以有)的颜色。 PaintDrawable

Shape

    一个 XML 文件,定义了一个几何形状,包括颜色和渐变。 ShapeDrawable

 

AnimationDrawable 资源的说明在【 Animation 资源】文章中。

 

Bitmap File

 

基本的 Bitmap 图像。 Android 支持几种不同格式的 Bitmap 文件: .png (最佳)、 .jpg (可接受)、 .gif (不要)。

注意: Bitmap 文件可能会被 aapt 工具进行无损图像压缩优化。例如,一个真彩色的 PNG (不超过 256 色)可能会被转换成一个带有颜色板的 8 PNG 。这样做能保证图片质量一样,但减少内存占用。因此,需要了解的是放在这个文件夹下的二进制图像在编译时可能会发生变更。如果你打算以位流方式读取图像来转化成 Bitmap 的话,可以把它们放到 res/raw 文件中,在这里,它们不会被优化。

 

File Location

    res/drawable/filename.png (.png, .jpg, .gif)

    文件名会被当作资源 ID 使用。

Complied Resource Datatype

    指向 BitmapDrawable 的资源指针。

Resource Reference

    R.drawable.filename Java

    @[package:]drawable/filename XML

Example

    res/drawable/myimage.png 位置保存了一张图片,在 Layout XML 中可以应用这个图片到一个 View 上:

    <ImageView

        android:layout_height="wrap_content"

        android:layout_width="wrap_content"

        android:src="@drawable/myimage" />

 

    下面的代码可以以 Drawable 方式得到图片:

    Resources res = getResources();

    Drawable drawable = res.getDrawable(R.drawable.myimage);

 

Nine-Patch File

 

NinePatch 是一种 PNG 图像,可以定义拉伸区域,当 View content 超出图像边界的话, Android 会拉伸它。典型用法是把这个图像设置为 View 的背景,而这个 View 至少有一个尺寸设置为“ wrap_content ”,当这个 View 变大来容纳 content 时, Nine-Patch 图像也会拉伸来匹配 View 的大小。

 

File Location

    res/drawable/filename.9.png

    文件名将被当作资源 ID 使用。

Complied Resource Datatype

    指向 NinePatchDrawable 的资源指针。

Resource Reference

    R.drawable.filename Java

    @[package:]drawable/filename XML

Example

    res/drawable/myninepatch.9.png 位置保存了一张图片,在 Layout XML 中可以应用这个图片到一个 View 上:

    <Button

        android:layout_height="wrap_content"

        android:layout_width="wrap_content"

        android:background="@drawable/myninepatch" />

 

State List

 

StateListDrawable 是定义在 XML 中的 Drawable 对象,能根据状态来呈现不同的图像。例如, Button 存在多种不同的状态( pressed focused other ),使用 StateListDrawable ,你可以为 Button 的每个状态提供不同的按钮图像。

 

你可以在 XML 文件中描述状态列表。在 <selector> 元素里的每个 <item> 代表每个图像。每个 <item> 使用不同的特性来描述使用的时机。

 

当每次状态改变时, StateList 都会从上到下遍历一次,第一个匹配当前状态的 item 将被使用——选择的过程不是基于“最佳匹配”,只是符合 state 的最低标准的第一个 item

 

File Location

    Res/drawable/filename.xml

    文件名将被当作资源 ID 使用。

Complied Resource Datatype

    指向 StateListDrawable 的资源指针。

Resource Reference

    R.drawable.filename Java

    @[package:]drawable/filename XML

Syntax

<? xml version = "1.0" encoding = "utf-8" ?>  

< selector xmlns:android = "http://schemas.android.com/apk/res/android"  

    android:constantSize = ["true" | "false"

    android:dither = ["true" | "false"

    android:variablePadding = ["true" | "false" ] >  

    < item  

        android:drawable = "@[package:]drawable/drawable_resource "  

        android:state_pressed = ["true" | "false"

        android:state_focused = ["true" | "false"

        android:state_selected = ["true" | "false"

        android:state_active = ["true" | "false"

        android:state_checkable = ["true" | "false"

        android:state_checked = ["true" | "false"

        android:state_enabled = ["true" | "false"

        android:state_window_focused = ["true" | "false" ] />  

</selector>

Elements

    <selector>

    必须。必须是根元素。可以包含一个或多个 <item> 元素。

    Attributes

        xmlns:android

                  String 。必须。定义 XML 的命名空间,必须是

                  http://schemas.android.com/apk/res/android ”。

              android:constantSize

           Boolean 。“ true ”表示随着状态变化, Drawable 的大小保持不变(所有状态中最大的 size );“ false ”表示大小会变化。默认是 false

              android:dither

Boolean 。“ true ”表示当 Bitmap 和屏幕的不是相同的像素设定时支持 Bitmap 抖动(例如, ARGB 8888 Bitmap RGB 565 的屏幕);“ false ”表示不支持。默认是“ true ”。

              android:variablePadding

                     Boolean 。“ true ”表示 Drawable Padding 可以变化;“ false ”表示 Padding 保持相同(所有状态的最大 Padding )。使能这一特征需要在状态变化时处理 Layout ,一般都不支持。默认值是 false

    <item>

              定义特定状态的 Drawable ,通过它的特性指定。必须是 <selector> 的子元素。

              Attributes

                  android:drawable

                            Drawable 资源。必须。指向一个 Drawable 资源。

    android:state_pressed

Boolean 。“ true ”表示按下状态使用(例如按钮按下);“ false ”表示非按下状态使用。

                  android:state_focused

Boolean 。“ true ”表示聚焦状态使用(例如使用滚动球 /D-pad 聚焦 Button );“ false ”表示非聚焦状态使用。

                  android:state_selected

Boolean 。“ true ”表示选中状态使用(例如 Tab 打开);“ false ”表示非选中状态使用。

                  android:state_checkable

Boolean 。“ true ”表示可勾选状态时使用;“ false ”表示非可勾选状态使用。(只对能切换可勾选—非可勾选的构件有用。)

                  android:state_checked

                            Boolean 。“ true ”表示勾选状态使用;“ false ”表示非勾选状态使用。

                  android:state_enabled

Boolean 。“ true ”表示可用状态使用(能接收触摸 / 点击事件);“ false ”表示不可用状态使用。

                  android:window_focused

Boolean 。“ true ”表示应用程序窗口有焦点时使用(应用程序在前台);“ false ”表示无焦点时使用(例如 Notification 栏拉下或对话框显示)。

注意: 记住一点, StateList 中第一个匹配当前状态的 item 会被使用。因此,如果第一个 item 没有任何状态特性的话,那么它将每次都被使用,这也是为什么默认的值必须总是在最后(如下面的例子所示)。

 

Example

    XML 文件保存在 res/drawable/button.xml

<? xml version = "1.0" encoding = "utf-8" ?>  

<selector xmlns:android = "http://schemas.android.com/apk/res/android" >  

    <item android:state_pressed = "true"  

          android:drawable = "@drawable/button_pressed" /> <!-- pressed -->  

    <item android:state_focused = "true"  

          android:drawable = "@drawable/button_focused" /> <!-- focused -->  

    <item android:drawable = "@drawable/button_normal" /> <!-- default -->  

</selector>

    Layout XML 将这个 Drawable 应用到一个 View 上:

<ImageView  

    android:layout_height = "wrap_content"  

    android:layout_width = "wrap_content"  

    android:src = "@drawable/button" />

 

Color

 

定义在 XML 中的 color ,可以当作 Drawable 使用,来填充矩形区域(圆角可以有)。这种 Drawable 的行为很像是颜色填充。

注意: Color Drawable 是一种简单的资源,可以使用 name 特性来引用其值(不再是 XML 文件的名)。因此,你可以在一个 XML 文件中的 <resources> 元素下添加多个 Color Drawable

 

File Location

    res/drawable/filename.xml

    文件名随意。元素的 name 将会当作资源 ID 使用。

Complied Resource Datatype

    指向 PaintDrawable 资源的指针。

Resource Reference

    R.drawable.color_name Java

    @[package:]drawable/color_name XML

Syntax

<? xml version = "1.0" encoding = "utf-8" ?>  

< resources >  

    < drawable   name = "color_name "  

        > color </drawable>  

</resources>

Elements

    <resources>

           必须。必须是根节点。

           没有特性。

    <drawable>

一个 color Drawable 。其值可以是任何有效的十六进制颜色值或者 Color 资源。 Color 值总是以“ # ”开头,后面紧跟 Alpha-Red-Green-Blue 信息,格式是: #RGB #ARGB 或者 #AARRGGBB

              Attributes

                  name

                            String 。必须。 Color 的名字。这个名字将被当作资源 ID 使用。

Example

    XML 文件保存在 res/drawable/color.xml

<? xml version = "1.0" encoding = "utf-8" ?>  

<resources>  

    <drawable name = "solid_red" > #f00 </drawable>  

    <drawable name = "solid_blue" > #0000ff </drawable>  

</resources>

    Layout XML 将会把这个 Color Drawable 应用到一个 View 上:

<TextView  

    android:layout_width = "fill_parent"  

    android:layout_height = "wrap_content"  

    android:background = "@drawable/solid_blue" />

    代码中获取 Color Drawable 并应用到 View 上:

Resources res =   getResources () ;  

Drawable redDrawable = res . getDrawable ( R . drawable . solid_red );  

 

TextView tv = ( TextView ) findViewByID ( R . id . text );  

tv . setBackground ( redDrawable );

 

Shape

 

定义在 XML 中的几何形状。

 

File Location

    res/drawable/filename.xml

    文件名将被当作资源 ID 使用。

Complied Resource Datatype

    指向 ShapeDrawable 的资源指针。

Resource Reference

    R.drawable.filename Java

    @[package:]drawable/filename XML

Syntax

<? xml version = "1.0" encoding = "utf-8" ?>  

< shape xmlns:android = "http://schemas.android.com/apk/res/android"  

    android:shape = ["rectangle" | "oval" | "line" | "ring" ] >  

    < gradient  

        android:angle = "integer "  

        android:centerX = "integer "  

        android:centerY = "integer "  

        android:centerColor = "integer "  

        android:endColor = "color "  

        android:gradientRadius = "integer "  

        android:startColor = "color "  

        android:type = ["linear" | "radial" | "sweep"

        android:usesLevel = ["true" | "false" ] />  

    < solid  

        android:color = "color " />  

    < stroke  

        android:width = "integer "  

        android:color = "color "  

        android:dashWidth = "integer "  

        android:dashGap = "integer " />  

    < padding  

        android:left = "integer "  

        android:top = "integer "  

        android:right = "integer "  

        android:bottom = "integer " />  

    < corners  

        android:radius = "integer "  

        android:topLeftRadius = "integer "  

        android:topRightRadius = "integer "  

        android:bottomLeftRadius = "integer "  

        android:bottomRightRadius = "integer " />  

</shape>

Elements

    <shape>

              必须。必须是根元素。

    Attributes

              android:shape

                  Keyword 。定义 Shape 的类型。有效的值包括:

Value

Desciption

"rectangle"

矩形。默认形状。

"oval"

椭圆。

"line"

水平直线。需要 <stroke> 元素定义线的宽度。

"ring"

环形。

 

接下来的特性只能在 android:shape=”ring” 时使用:

              android:innerRadius

                  Dimension 。内环的半径。

              android:innerRadiusRatio

         Float 。以环的宽度比率来表示内环的半径。例如,如果 android:innerRadiusRatio=”5” ,内环半径等于环的宽度除以 5 。这个值可以被 android:innerRadius 覆盖。默认值是 9

              android:thickness

                  Dimension 。环的厚度。

              android:thicknessRatio

           Float 。以环的宽度比率来表示环的厚度。例如,如果 android:thicknessRatio=”2” ,厚度就等于环的宽度除以 2 。这个值可以被 android:thickness 覆盖。默认值是 3

              android:useLevel

                  Boolean 。“ true ”表示可以当作 LevelListDrawable 使用。一般都为“ false ”。

   

<gradient>

              Shape 指定渐变色。

Attributes

              android:angle

Integer 。渐变色的角度值。 0 表示从左到右, 90 表示从下到上。必须是 45 的倍数,默认是 0

              android:centerX

                  Float 。渐变色中心的 X 相对位置( 0-1.0 )。当 android:type=”linear” 时无效。

              android:centerY

                  Float 。渐变色中心的 Y 相对位置( 0-1.0 )。当 android:type=”linear” 时无效。

              android:centerColor

                  Color 。可选的颜色,出现在 start end 颜色之间。

              android:endColor

                  Color end 颜色。

              android:gradientRadius

                  Float 。渐变色的半径。当 android:type=”radial” 时有效。

              android:startColor

                  Color start 颜色。

android:type

                  Keyword 。渐变色的样式。有效值为:

Value

Description

"linear"

线性渐变,默认值。

"radial"

环形渐变。 start 颜色是处于中间的颜色。

"sweep"

sweep 渐变

              android:useLevel

                  Boolean 。“ true ”表示可以当作 LevelListDrawable 使用。

   

<solid>

              填充 shape 的单一色。

Attributes

    android:color

                  Color 。这个颜色会应用到 shape 上。

   

<stroke>

              shape 的线形。

    Attributes

              android:width

                  Dimension 。线的厚度。

              android:color

                  Color 。线的颜色。

              android:dashGap

                  Dimension 。间断线间的距离。仅在 android:dashWidth 设定时有效。

              android:dashWidth

                  Dimension 。间断线的大小。仅在 android:dashGap 设定时有效。

 

    <padding>

              内部 View 元素的边距。

    Attributes

              android:left

                  Dimension 。左内边距。

              android:top

                  Dimension 。上内边距。

              android:right

                  Dimension 。右内边距。

              android:bottom

                  Dimension 。下内边距。

 

    <corners>

              shape 创建圆角。当 shape 是一个矩形时有效。

    Attributes

              android:radius

                  Dimension 。圆角的半径。会被下面的特性覆盖。

              android:topLeftRadius

                  Dimension 。左上圆角半径。

              android:topRightRadius

                  Dimension 。右上圆角半径。

              android:bottomLeftRadius

                  Dimension 。左下圆角半径。

              android:bottomRightRadius

                  Dimension 。右下圆角半径。

 

Examples

    XML 文件保存在 res/drawable/gradient_box.xml

 

<? xml version = "1.0" encoding = "utf-8" ?>  

<shape xmlns:android = "http://schemas.android.com/apk/res/android"  

    android:shape = "rectangle" >  

    <gradient  

        android:startColor = "#FFFF0000"  

        android:endColor = "#80FF00FF"  

        android:angle = "45" />  

    <padding android:left = "7dp"  

        android:top = "7dp"  

        android:right = "7dp"  

        android:bottom = "7dp" />  

    <corners android:radius = "8dp" />  

</shape>

    Layout XML 将被当作 ShapeDrawable 应用到一个 View 上:

<TextView  

    android:background = "@drawable/gradient_box"  

    android:layout_height = "wrap_content"  

    android:layout_width = "wrap_content" />

    代码中也可以获得 ShapeDrawable ,然后应用到 View 上:

Resources res = getResources () ;  

Drawable shape = res . getDrawable ( R . drawable . gradient_box );  

 

TextView tv = ( TextView ) findViewByID ( R . id . textview );  

tv . setBackground ( shape );

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值