之前在项目中写了个全局通用组件Button,以前写button的时候要写按下的状态,正常状态,每次使用的时候都得重复写代码,如果要产品经理想改,那又是另一番工作量,就写了个通用的。目前记录下,相当于复习下自定义view
- 自定义你想要设置的属性,我这边需要设置不同状态设置不同的button,以及button大小
<?xml version="1.0" encoding="utf-8"?>
<resources>
<declare-styleable name="UIButton">
<attr name="UIButtonType">
<enum name="primary" value="0x01"></enum>
<enum name="normal" value="0x02"></enum>
</attr>
<attr name="UIButtonSize">
<enum name="large" value="0x01"></enum>
<enum name="middle" value="0x02"></enum>
<enum name="small" value="0x03"></enum>
</attr>
</declare-styleable>
</resources>
2.设置选择器背景(我的代码是java和kotlin混着写的)
/**
* 创建带圆角的drawable
*/
fun createRoundCornerDrawable(unit :Int,fillColor : Int,roundCorner : Float) : Drawable{
var gradientDrawable = GradientDrawable()
gradientDrawable.setColor(fillColor)
if (unit == TypedValue.COMPLEX_UNIT_DIP) {
gradientDrawable.cornerRadius = DisplayUtil.dip2px(roundCorner).toFloat()
}else {
gradientDrawable.cornerRadius = roundCorner
}
return gradientDrawable
}
/**
* 创建一个可选择的drawable
*/
fun createSelectorDrawable(normalDrawable : Drawable,pressedDrawable : Drawable,disableDrawable : Drawable) : Drawable{
var selectorDrawable = StateListDrawable()
selectorDrawable.addState(intArrayOf(android.R.attr.state_pressed), pressedDrawable)
selectorDrawable.addState(intArrayOf(android.R.attr.state_enabled), normalDrawable)
selectorDrawable.addState(StateSet.WILD_CARD, disableDrawable)
return selectorDrawable
}
- 使用方式
一.xml文件形式
<com.wrl.exercise.widget.UIButton
android:id="@+id/btn"
android:layout_width="match_parent"
android:layout_height="wrap_content"
app:UIButtonType="primary"
app:UIButtonSize="middle"
android:text="点击"
android:layout_margin="20dp" />
二.代码形式
UIButton uiButton = new UIButton(mContext);
uiButton.updateButtonStyle(UIButton.TYPE_PRIMARY, UIButton.SIZE_MIDDLE);