shape主要有四种,分别为矩形,椭圆形,线条,环。
android:shape=["rectangle" | "oval" | "line" | "ring"] >
标签介绍
在example.xml所有标签中,以下标签只属于ring
属性 | 说明 |
---|---|
android:innerRadius | 内圈半径 |
android:innerRadiusRatio | 可以根据它得出环的内圈半径,公式为innerRadius=width/innerRadiusRatio |
android:thickness | 环的厚度 |
android:thicknessRatio | 可以根据它得出环的厚度,公式为thickness=width/thicknessRatio |
android:useLevel | 如果当做是LevelListDrawable使用时值为true,否则为false. |
接下来介绍其他的标签及属性
<corners
android:radius="integer"
android:topLeftRadius="integer"
android:topRightRadius="integer"
android:bottomLeftRadius="integer"
android:bottomRightRadius="integer" />
属性 | 说明 |
---|---|
android:radius | 所有圆角半径 |
android:topLeftRadius | 左上角圆角半径 |
android:topRightRadius | 右上角圆角半径 |
android:bottomLeftRadius | 左下角圆角半径 |
android:bottomRightRadius | 右下角圆角半径 |
<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"] />
属性 | 说明 |
---|---|
android:angle | 颜色渐变方向,0为从左向右,90为从下到上(逆时针方向变化) |
android:centerX | 水平方向渐变中间颜色所在位置 |
android:centerY | 垂直方向渐变中间颜色所在位置 |
android:centerColor | 颜色渐变开始到结束中间颜色值 |
android:endColor | 渐变结束的颜色值 |
android:gradientRadius | 颜色渐变半径,只有android:type=”radial”才可以使用 |
android:startColor | 渐变开始的颜色值 |
android:type=[“linear”,”radial”,”sweep”] | 渐变的方式,分为线性、放射、扫描三种。 |
android:useLevel=[“true”,”false”] | 是否被当作LevelListDrawable |
<size
android:width="integer"
android:height="integer" />
属性 | 说明 |
---|---|
android:width | shap的宽度设置 |
android:height | shape的高度设置 |
<solid
android:color="color" />
属性 | 说明 |
---|---|
android:color | shape颜色值 |
<stroke
android:width="integer"
android:color="color"
android:dashWidth="integer"
android:dashGap="integer" />
属性 | 说明 |
---|---|
android:width | 划线的宽度(粗细) |
android:color | 划线的颜色 |
android:dashWidth | 破折线的长度 |
android:dashGap | 破折线之间的空隙长度 |
注意:
1. shape = “line”时,padding标签中的android:left,android:right会失效。
2. 使用shape=”line”绘制虚线,由于android4.0默认打开了自动加速,会导致绘制失效,显示实线。
解决办法就是关闭自动加速。一种方式为在AndroidManifest.xml中Activity标签中添加 android:hardwareAccelerated=”false”一种在java代码中调用view.setLayerType(View.LAYER_TYPE_SOFTWARE, null);取消硬件加速导致的新问题,在使用过程中发现自定义样式的progressdialog显示会变形。
以下是Android开发文档中的内容
Shape Drawable
This is a generic shape defined in XML.
-
file location:
-
res/drawable/filename.xml
The filename is used as the resource ID.
compiled resource datatype:
-
Resource pointer to a
GradientDrawable
.
resource reference:
-
In Java:
R.drawable.filename
In XML:@[package:]drawable/filename
syntax:
-
<?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>
elements:
-
The following attributes are used only when
android:shape="ring"
:- Dimension. The radius for the inner part of the ring (the hole in the middle), as a dimension value or dimension resource.
-
Float. The radius for the inner part of the ring, expressed as a ratio of the ring’s width. For instance, if
android:innerRadiusRatio="5"
, then the inner radius equals the ring’s width divided by 5. This value is overridden byandroid:innerRadius
. Default value is 9. - Dimension. The thickness of the ring, as a dimension value or dimension resource.
-
Float. The thickness of the ring, expressed as a ratio of the ring’s width. For instance, if
android:thicknessRatio="2"
, then the thickness equals the ring’s width divided by 2. This value is overridden byandroid:innerRadius
. Default value is 3. -
Boolean. “true” if this is used as a
LevelListDrawable
. This should normally be “false” or your shape may not appear.
android:innerRadius
android:innerRadiusRatio
android:thickness
android:thicknessRatio
android:useLevel
-
Creates rounded corners for the shape. Applies only when the shape is a rectangle.
attributes:
- Dimension. The radius for all corners, as a dimension value or dimension resource. This is overridden for each corner by the following attributes.
- Dimension. The radius for the top-left corner, as a dimension value or dimension resource.
- Dimension. The radius for the top-right corner, as a dimension value or dimension resource.
- Dimension. The radius for the bottom-left corner, as a dimension value or dimension resource.
- Dimension. The radius for the bottom-right corner, as a dimension value or dimension resource.
android:radius
android:topLeftRadius
android:topRightRadius
android:bottomLeftRadius
android:bottomRightRadius
Note: Every corner must (initially) be provided a corner radius greater than 1, or else no corners are rounded. If you want specific corners to not be rounded, a work-around is to use
android:radius
to set a default corner radius greater than 1, but then override each and every corner with the values you really want, providing zero (“0dp”) where you don’t want rounded corners. -
Specifies a gradient color for the shape.
attributes:
- Integer. The angle for the gradient, in degrees. 0 is left to right, 90 is bottom to top. It must be a multiple of 45. Default is 0.
- Float. The relative X-position for the center of the gradient (0 - 1.0).
- Float. The relative Y-position for the center of the gradient (0 - 1.0).
- Color. Optional color that comes between the start and end colors, as a hexadecimal value or color resource.
- Color. The ending color, as a hexadecimal value or color resource.
-
Float. The radius for the gradient. Only applied when
android:type="radial"
. - Color. The starting color, as a hexadecimal value or color resource.
-
Keyword. The type of gradient pattern to apply. Valid values are:
Value Description "linear"
A linear gradient. This is the default. "radial"
A radial gradient. The start color is the center color. "sweep"
A sweeping line gradient. -
Boolean. “true” if this is used as a
LevelListDrawable
.
android:angle
android:centerX
android:centerY
android:centerColor
android:endColor
android:gradientRadius
android:startColor
android:type
android:useLevel
-
Padding to apply to the containing View element (this pads the position of the View content, not the shape).
attributes:
- Dimension. Left padding, as a dimension value or dimension resource.
- Dimension. Top padding, as a dimension value or dimension resource.
- Dimension. Right padding, as a dimension value or dimension resource.
- Dimension. Bottom padding, as a dimension value or dimension resource.
android:left
android:top
android:right
android:bottom
-
The size of the shape.
attributes:
- Dimension. The height of the shape, as a dimension value or dimension resource.
- Dimension. The width of the shape, as a dimension value or dimension resource.
android:height
android:width
Note: The shape scales to the size of the container View proportionate to the dimensions defined here, by default. When you use the shape in an
ImageView
, you can restrict scaling by setting theandroid:scaleType
to"center"
. -
A solid color to fill the shape.
attributes:
- Color. The color to apply to the shape, as a hexadecimal value or color resource.
android:color
-
A stroke line for the shape.
attributes:
- Dimension. The thickness of the line, as a dimension value or dimension resource.
- Color. The color of the line, as a hexadecimal value or color resource.
-
Dimension. The distance between line dashes, as a dimension value or
dimension resource. Only valid if
android:dashWidth
is set. -
Dimension. The size of each dash line, as a dimension value or
dimension resource. Only valid if
android:dashGap
is set.
android:width
android:color
android:dashGap
android:dashWidth
<corners>
<gradient>
<padding>
<size>
<solid>
<stroke>
example:
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>
<p>This layout XML applies the shape drawable to a View:</p>
<TextView android:background="@drawable/gradient_box" android:layout_height="wrap_content" android:layout_width="wrap_content" />
<p>This application code gets the shape drawable and applies it to a View:</p>
Resources res =getResources()
; Drawable shape = res.getDrawable
(R.drawable.gradient_box); TextView tv = (TextView)findViewByID(R.id.textview); tv.setBackground(shape);