您的位置:首页 > 移动开发 > Android开发

android资源文件

2011-02-18 17:13 218 查看
转自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

);
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: