android 资源文件学习

1:资源文件夹
屏幕尺寸:android把所有的屏幕尺寸分为了4个广义的大小:小,正常,大,特大。 屏幕密度:屏幕的物理面积内像素的数量,通常称为DPI(每英寸点数)。android把所有的实际屏幕密度分为:低,中,高,特高。 android 程序通常需要为不同的屏幕密度提供不同的位图drawables 默认情况下面系统会自动调整和缩放位图,但是难免拉伸位图,为了保证你的位图是最好看的,根据广义密度,低,中 型, 高,特高去添加不同的位图资源。比如,如需对密度为low的屏幕提供合适的图片,需新建文件夹drawable-ldpi/。应尽量使用点9格式的 图片,图片大小的确定:low:medium:high:extra high比例为3:4:6:8。举例来说,对于中等密度(medium)的屏幕你的图片像素大小为48×48,那么低密度(low)屏幕的图片大小应为 36×36,高(high)的为72×72,extra high为96×96。 layout 默认中等屏幕 layout-small 小屏幕 layout-large 大屏幕 layout-xlarge 特大屏幕 layout-land 横屏 layout-port 竖屏 drawable 默认中等密度 drawable-hdpi 高密度 ~240dpi drawable-mdpi 中等密度 160dpi drawable-xhdpi 更高密度 ~320dpi drawable-nodpi 所有密度资源,无论什么密度屏幕都会适配。 drawable-tvdpi 介于mdpi~hdpi 约213dpi 主要应用在电视。

2:详细介绍
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 );


主要参考文章 :http://blog.sina.com.cn/s/blog_69b1501d010126g7.html
http://aokunsang.iteye.com/blog/1112274

猜你喜欢

转载自zjingye.iteye.com/blog/1948299