具体的可参考官方文档的解释形状可绘制对象
文件位置:
res/drawable/filename.xml
编译资源类型:GradientDrawable
文件引用:
In Java:R.drawable.filename
In XML:@[package:]drawable/filename
语法
<corners
android:radius="integer"
android:topLeftRadius="integer"
android:topRightRadius="integer"
android:bottomLeftRadius="integer"
android:bottomRightRadius="integer" />
<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>
内容参考:
实线line_solid.xml
:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line">
<stroke android:width="2dp" android:color="#ff0000"/>
shape>
虚线line_dash.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="line">
<stroke android:width="2dp" android:color="#ff0000" android:dashGap="5dp" android:dashWidth="10dp"/>
shape>
布局文件及效果
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical"
tools:context=".MainActivity">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="实线"
android:textAlignment="center"
android:background="@drawable/line_solid"/>
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:text="虚线"
android:textAlignment="center"
android:background="@drawable/line_dash"/>
LinearLayout>
android:shape="rectangle"
,solid
表示的是用于填充形状的纯色
矩形带边框
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<stroke android:color="#ffff0000" android:width="2dp"/>
<solid android:color="#ff00ffff" />
shape>
圆角矩形
为形状产生圆角。仅当形状为矩形时适用
android:radius
- 所有角的半径android:topLeftRadius
- 左上角的半径android:topRightRadius
- 右上角的半径android:bottomLeftRadius
- 左下角的半径android:bottomRightRadius
- 右下角的半径如下的rect_rounded_left_right_arc_border.xml
:
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="rectangle">
<stroke android:color="#ffff0000" android:width="2dp"/>
<solid android:color="#8000ff00" />
<corners android:radius="50dp" />
shape>
<TextView
android:layout_width="match_parent"
android:layout_height="100dp"
android:text="圆角矩形-左右两边都是半圆弧-带边框"
android:gravity="center"
android:layout_marginTop="10dp"
android:background="@drawable/rect_rounded_left_right_arc_border"/>
gradient: 设置形状的渐变颜色,可以是线性渐变、辐射渐变、扫描性渐变
参考Android Shape, Selector Examples中的例子:
定义一个gradient.xml
<shape xmlns:android="http://schemas.android.com/apk/res/android" android:shape="oval">
<gradient android:startColor="@color/colorBlue"
android:endColor="@color/colorGreen"
android:angle="45"
android:type="linear"/>
shape>
<TextView
android:layout_margin="10dp"
android:layout_width="200dp"
android:layout_height="200dp"
android:background="@drawable/gradient"/>
其它的渐变可以参考:
要应用到包含视图元素的内边距(这会填充视图内容的位置,而非形状)
参考Drawables
如下的solid_color_shape.xml
,当有padding
的时候
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle" >
<corners android:radius="4dp" />
<stroke android:width="4dp" android:color="#C1E1A6" />
<solid android:color="#118C4E"/>
<padding android:left="20dp" android:top="20dp"
android:right="20dp" android:bottom="20dp" />
shape>
shape根元素有些属性只适用于ring类型
参考:
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:innerRadius="20dp"
android:shape="ring"
android:thickness="10dp"
android:useLevel="false">
<solid android:color="@color/colorPrimary" />
<padding android:bottom="50dp"
android:left="16dp"
android:right="16dp"
android:top="50dp"/>
shape>
1.Android Shape Drawables Tutorial