自定义安卓Button样式

时间:2022-01-19 18:32:07
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">

<item android:state_pressed="false">
<shape android:shape="rectangle">
<corners android:radius="8dip"/>
<stroke android:width="1dip" android:color="#ff000000" />
<solid android:color="#00ffffff"/>
</shape>
</item>

<item android:state_pressed="true">
<shape android:shape="rectangle">
<corners android:radius="8dp"/>
<stroke android:width="1dip" android:color="#ff000000" />
<solid android:color="#22000000"/>
</shape>
</item>
</selector>

Talk is cheap,Show you the code.

估计很多朋友对上面的一些属性不是很清楚,比如selector,item,shape,corners,stroke,solid等不太了解,下面的代码就是他们的详细介绍。(上面的代码是我找到的使用最全的,你如果有自定义Button需求的话应该够用了)。上面的可以拆成两部分。第一部分是selector和下面的item属性。第二部分是shape和下面的coeners,stroke,solid等属性。

selector

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android" >
<!-- 按下状态:(01) true表示按下,例如,Button被按下; (02) false表示非按下。 -->
<item android:state_pressed="true/false" android:drawable="@drawable/exam01" />
<!-- 聚焦状态:(01) true表示获取焦点; (02) false表示非获取焦点。 -->
<item android:state_focused="true/false" android:drawable="@drawable/exam01" />
<!-- 选中状态:(01) true表示选中,例如,Tab被选中; (02) false表示非选中。 -->
<item android:state_selected="true/false" android:drawable="@drawable/exam01" />
<!-- 可勾选状态:(01) true表示可勾选; (02) false表示不可勾选。 -->
<item android:state_checkable="true/false" android:drawable="@drawable/exam01" />
<!-- 选中状态:(01) true表示选中,例如,checkbox被选中; (02) false表示非选中。 -->
<item android:state_checked="true/false" android:drawable="@drawable/exam01" />
<!-- 使能状态:(01) true表示可用; (02) false表示不可用。 -->
<item android:state_enabled="true/false" android:drawable="@drawable/exam01" />
<!-- 焦点状态:(01) true表示获取焦点; (02) false表示可获取焦点。 -->
<item android:state_window_focused="true/false" android:drawable="@drawable/exam01" />
</selector>

Shape

<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android"
android:shape=["rectangle" | "oval" | "line" | "ring"] > --- 默认为rectangle
android:innerRadius="dimension" -- ring专用,内圆环的半径大小。设置innerRadius时,会忽略innerRadiusRatio
android:innerRadiusRatio="float" -- ring专用,内圆环的半径比例。例如,比例为10表示"内圆环的半径大小=圆环宽度/10"
android:thickness="dimension" -- ring专用,内圆环的厚度大小。设置thickness时,会忽略thicknessRatio
android:thicknessRatio="float" -- ring专用,内圆环的厚度比例。例如,比例为10表示"内圆环的厚度大小=圆环宽度/10"
android:useLevel="true|false" -- true表示将该形状当作LevelListDrawable
<size -- 大小
android:width="dimension"
android:height="dimension" />
<gradient -- 渐变
android:type=["linear" | "radial" | "sweep"] -- 渐变类型:线性,径向,扫描
android:angle="float"
android:startColor="color"
android:centerColor="color" -- 中心点颜色
android:endColor="color"
android:centerX="float|fraction" -- 中心点X坐标
android:centerY="float|fraction" -- 中心点Y坐标
android:gradientRadius="float|fraction" -- 径向渐变的半径
android:useLevel=["true" | "false"] />
<corners -- shape=“rectangle”时使用,
android:radius="dimension" -- 四个角的半径
android:topLeftRadius="dimension"
android:topRightRadius="dimension"
android:bottomLeftRadius="dimension"
android:bottomRightRadius="dimension" />
<padding -- 内容与边框的距离
android:left="dimension"
android:top="dimension"
android:right="dimension"
android:bottom="dimension" />
<solid -- 填充颜色
android:color="color" />
<stroke -- 指定边框
android:width="dimension"
android:color="color"
android:dashWidth="dimension" -- 虚线宽度
android:dashGap="dimension" /> -- 虚线间隔宽度
</shape>