Android中drawable XML shape是定义纯色、渐变、圆角、描边等轻量图形的方式,无需图片,适配好、体积小、可动态修改;根节点为<shape>,支持rectangle、oval、line、ring四种类型,通过<solid><stroke><corners><gradient><size>等子标签实现不同效果,常用于按钮背景等场景。

Android 中的 drawable XML 形状(shape)是定义纯色、渐变、圆角、描边等简单图形最轻量的方式,无需图片资源,适配性好、体积小、可动态修改。
shape 基本结构与类型
<shape> 是根节点,必须通过 android:shape 指定形状类型:
- rectangle:矩形(默认值),用于按钮背景、卡片、分割线等
- oval:椭圆,常用于圆形头像占位、指示点、小图标
-
line:直线,需配合
<stroke>使用,注意要设高度(如android:height="2dp") - ring:环形,多用于进度条或自定义 loading 圆圈,支持内径、厚度、是否填充等属性
常用子标签与关键属性
在 <shape> 内可嵌套以下标签实现不同效果:
-
<solid android:color="..." />:填充颜色(纯色或带透明度,如
#80FF57B2) -
<stroke android:width="..." android:color="..." android:dashWidth="..." android:dashGap="..." />:描边,支持虚线(设置
dashWidth和dashGap) -
<corners android:radius="..." android:topLeftRadius="..." 等 />:圆角,可统一设半径,也可分别指定四角(仅
rectangle支持) -
<gradient ... />:渐变,支持
linear(线性)、radial(径向)、sweep(扫描),常用属性包括android:startColor、android:endColor、android:angle(仅线性渐变,45 的倍数,0 表示从左到右) -
<size android:width="..." android:height="..." />:建议设置,尤其用于
oval或line,避免拉伸变形
实用示例:一个带阴影感的圆角按钮背景
保存为 res/drawable/bg_button_primary.xml:
android:shape="rectangle">
<solid android:color="#4CAF50" />
<corners android:radius="8dp" />
<stroke
android:width="1dp"
android:color="#388E3C" />
</shape>
然后在 Button 中使用:android:background="@drawable/bg_button_primary"
注意事项与技巧
- shape 文件放在
res/drawable/下,命名小写+下划线,避免大写字母和特殊符号 - 颜色推荐用
@color/xxx引用主题色,便于夜间模式或主题切换 - 圆角值过大(如超过高度一半)在
rectangle中仍有效,但oval会自动适应为正圆 - 想实现“阴影”效果?shape 本身不支持投影,可用
layer-list叠加偏移的深色矩形模拟,或改用MaterialCardView+elevation - 运行时修改?可通过
GradientDrawable获取并调用setColor()、setCornerRadii()等方法动态更新










