用来在XML中定义shape。
文件位置:
res/drawable/filename.xml
这个文件名作为资源ID使用。
编译后的资源类型:
资源指向GradientDrawable。
资源引用方式:
在Java中,R.drawable.filename
在XML中,@[package:]drawable/filename
语法:
<?xml version="1.0"encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape=["rectangle" | "oval" |"line" | "ring"] >
<corners
android:radius="integer"
android:topLeftRadius="integer"
android:topRightRadius="integer"
android:bottomLeftRadius="integer"
android:bottomRightRadius="integer" />
<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:useLevel=["true" |"false"] />
<padding
android:left="integer"
android:top="integer"
android:right="integer"
android:bottom="integer"/>
<size
android:width="integer"
android:height="integer"/>
<solid
android:color="color" />
<stroke
android:width="integer"
android:color="color"
android:dashWidth="integer"
android:dashGap="integer"/>
</shape>
元素:
<shape>
这个shape drawable。必须作为根元素。
属性:
xmlns:android
字符串。必须指定。定义这个XML的namespace,必须是
“http://schemas.android.com/apk/res/android”
android:shape
关键字。定义了shape的类型。可用的值如下:
Value | Description |
“rectangle” | 将矩形填充到这个容器视图,默认值。 |
“oval” | 将椭圆填充到这个容器中。 |
“line” | 铺满这个容器视图的一条横线。这个外观需要<stroke>元素来定义线的宽度。 |
“ring” | 环形。 |
只有当android:shape=”ring”时,下面属性才会被使用:
android:innerRadius
Dimension。内部环(中心点)的半径,dimension值或dimensionresource。
android:innerRadiusRatio
Float。内部环的半径,占环宽度的比例。例如,如果android:innerRadiusRatio=”5”,那么内部半径就等于环的宽度除以5。这个值由android:innerRadius重写,默认值是9。
android:thickness
Dimension。环的厚度,dimension值或dimensionresource。
android:thicknessRatio
Float。环的厚度,占环宽度的笔录。例如,如果android:thicknessRatio=”2”,那么这个厚度就等于环宽度除以2。值被android:innerRadius重写,默认为3。
android:useLevel
布尔值。如果这用作LevelListDrawable则为true。一般情况这项应该为”false”,否则你要的形状可能不会出现。
<corners>
为这个shape创建圆角。只有当形状为矩形时才能使用。
属性:
android:radius
Dimension。所有角的半径,类型为dimension值或dimension resource。对于每个角可以通过下面的属性进行重写。
android:topLeftRadius
Dimension。左上角的半径,类型为dimension值或dimensionresource。
android:topRightRadius
Dimension。右上角的半径,类型为dimension值或dimensionresource。
android:bottomLeftRadius
Dimension。左下角的半径,类型为dimension值或dimensionresource。
android:bottomRightRadius
Dimension。右下角的半径,类型为dimension值或dimensionresource。
注意:每个角(最初)必须提供大于1的半径,否则不会出现圆角。如果你不想将角指定为圆角,应急预案是用android:radius将每个角的半径设为大于1,然后用你想要的真实值再重写每个角,并且在你不想要圆角时将它设为0(“0dp”)。
<gradient>
对这个形状指定渐变色。
属性:
android:angle
Integer。渐变的角度,以度为单位。0为从左到右,90为从下到上。它必须是45的倍数。默认是0。
android:centerX
Float。X方向中心点的位置(0~1.0)。
android:centerY
Float。Y方向中心点的位置(0~1.0)。
android:centerColor
Color。来自开始和结束颜色之间的可选颜色,16进制数或color resource。
android:endColor
Color。结束时的颜色,16进制数或colorresource。
android:gradientRadius
Float。渐变半径。只有当android:type="radial"时才使用。
android:startColor
Color。开始时的颜色,16进制数或colorresource。
android:type
关键字。应用的渐变模式的类型,可用的值有:
Value | Description |
“linear” | 线性渐变,默认值。 |
“radial” | 径向渐变。开始颜色为中心颜色。 |
“sweep” | 扫线渐变。 |
android:useLevel
Boolean。如果这用作LevelListDrawable时此项为true。
<padding>
填充应用的容器视图(这会填充视图的内容,而不是形状)。
android:left
Dimension。左边距。dimension值或dimensionresource。
android:top
Dimension。上边距。dimension值或dimensionresource。
android:right
Dimension。右边距。dimension值或dimensionresource。
android:bottom
Dimension。下边距。dimension值或dimensionresource。
<size>
形状的尺寸。
属性:
android:height
Dimension。形状的高度。dimension值或dimensionresource。
android:width
Dimension。形状的宽度。dimension值或dimensionresource。
注意:默认情况下,这个shape会等比例计算容器视图的尺寸来适应设置的尺寸。当你在ImageView中使用shape时,你能通过设置android:scaleType=”center”来限制计算类型。
<solid>
填充到shape的颜色。
属性:
android:color
Color。应用到shape的颜色。十六进制或colorresource。
<stroke>
这个shape的中线。
属性:
android:width
Dimension。线条的厚度,dimension值或dimensionresource。
android:color
Color。线条的颜色,十六进制或colorresource。
android:dashGap
Dimension。线条破折号之间的距离,dimension值或dimensionresource。只有当android:dashWidth设置后才可用。
android:dashWidth
Dimension。每条破折线的尺寸,dimension值或dimensionresource。只有设置了android:dashGap后才可用。
例子:
保存在res/drawable/ gradient_box.xml中的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>
在布局XML中将这个shape drawable应用到视图上:
<TextView
android:background="@drawable/gradient_box"
android:layout_height="wrap_content"
android:layout_width="wrap_content" />
下方是通过代码获取shape drawable并将它应用到视图上:
Resources res = getResources();
Drawable shape = res.getDrawable(R.drawable.gradient_box);
TextView tv =(TextView)findViewByID(R.id.textview);
tv.setBackground(shape);
SEE ALSO: