shape 篇
默认的样式rectangle
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="rectangle">
<!-- solid指定形状的填充色,只有android:color一个属性 -->
<solid android:color="#2F90BD" />
<!-- padding设置内容区域离边界的间距 -->
<padding
android:bottom="12dp"
android:left="12dp"
android:right="12dp"
android:top="12dp" />
<!-- corners设置圆角,只适用于rectangle -->
<corners android:radius="200dp" />
<!-- stroke设置描边 -->
<stroke
android:width="2dp"
android:color="@android:color/darker_gray"
android:dashGap="4dp"
android:dashWidth="4dp" />
</shape>
椭圆样式oval
<?xml version="1.0" encoding="utf-8"?>
<!-- android:shape指定形状类型,默认为rectangle -->
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="oval">
<!-- padding设置内间距 -->
<padding
android:bottom="4dp"
android:left="4dp"
android:right="4dp"
android:top="4dp" />
<!-- size设置形状的大小 -->
<size
android:width="40dp"
android:height="40dp" />
<!-- gradient设置渐变 -->
<gradient
android:endColor="#000000"
android:gradientRadius="40dp"
android:startColor="#FFFFFF"
android:type="radial" />
</shape>
线形样式line
<?xml version="1.0" encoding="utf-8"?>
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:shape="line">
<!-- 实际显示的线 -->
<stroke
android:width="1dp"
android:color="#2F90BD"
android:dashGap="2dp"
android:dashWidth="4dp" />
<!-- 形状的高度 -->
<size android:height="4dp" />
</shape>
环形样式ring
<shape xmlns:android="http://schemas.android.com/apk/res/android"
android:innerRadiusRatio="3" 内环的半径
android:shape="ring"
android:thicknessRatio="9" 环的厚度
android:useLevel="false" 一般为false,否则可能环形无法显示,只有作为LevelListDrawable使用时才设为true
>
<gradient
android:endColor="#2F90BD"
android:startColor="#FFFFFF"
android:type="sweep" />
<stroke
android:width="1dp"
android:color="@android:color/black" />
</shape>
select篇
item是从上往下匹配的,如果匹配到一个item那它就将采用这个item,而不是采用最佳匹配的规则;所以设置默认的状态,一定要写在最后
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 当前窗口失去焦点时 -->
<item android:drawable="@drawable/bg_btn_lost_window_focused" android:state_window_focused="false" />
<!-- 不可用时 -->
<item android:drawable="@drawable/bg_btn_disable" android:state_enabled="false" />
<!-- 按压时 -->
<item android:drawable="@drawable/bg_btn_pressed" android:state_pressed="true" />
<!-- 被选中时 -->
<item android:drawable="@drawable/bg_btn_selected" android:state_selected="true" />
<!-- 被激活时 -->
<item android:drawable="@drawable/bg_btn_activated" android:state_activated="true" />
<!-- 默认时 -->
<item android:drawable="@drawable/bg_btn_normal" />
</selector>
layer-list篇
<?xml version="1.0" encoding="utf-8"?>
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
<!-- 灰色阴影 -->
<item
android:left="2dp" 左侧的偏移量
android:top="4dp"> 顶部的偏移量
<shape>
<solid android:color="@android:color/darker_gray" />
<corners android:radius="10dp" />
</shape>
</item>
<!-- 白色前景 -->
<item
android:bottom="4dp" 底部的偏移量
android:right="2dp"> 右侧的偏移量
<shape>
<solid android:color="#FFFFFF" />
<corners android:radius="10dp" />
</shape>
</item>
</layer-list>
style篇(终篇)
Android样式的开发:Style篇
代码动态修改 style.xml 部分内容
场景:shape都是在xml文件里面写死了,设置了圆角和背景颜色
需求:改变背景颜色的同时,圆角不变
失败的尝试
View.setBackgroundColor(color);
View.setBackgroundDrawable(R.drawable.shape);
正确的解决
GradientDrawable myGrad = (GradientDrawable)view.getBackground();
myGrad.setColor(color);