在网上查询了好多的方法 都是设置 style 什么的 只改变了 图标的样式 没有改变大小
然后我就去看了一下源码 checkbox 继承 CompoundButton CompoundButton继承了TextView
我就想能不能把checkbox的选中图标 设置成drawableLeft
然后试了 一下 成功了 下面献上代码 请各位大佬 指正
如果帮你解决了问题 要记得点赞哦😊
1 先自定义 属性
<declare-styleable name="MyCheckBox">
<attr name="android:button" />
<attr name="attr_drawableWidth" format="dimension" />
<attr name="attr_drawableHight" format="dimension" />
</declare-styleable>
2 然后重写 CheckBox
public class MyCheckBox extends AppCompatCheckBox {
private int drawbleW;
private int drawbleH;
public MyCheckBox(Context context) {
this(context, null);
}
public MyCheckBox(Context context, AttributeSet attrs) {
super(context, attrs);
TypedArray array = context.obtainStyledAttributes(attrs, R.styleable.MyCheckBox);
Drawable drawable = array.getDrawable(R.styleable.MyCheckBox_android_button);
drawbleW = (int) array.getDimension(R.styleable.MyCheckBox_attr_drawableWidth, 40);
drawbleH = (int) array.getDimension(R.styleable.MyCheckBox_attr_drawableHight, 40);
setCompoundDrawablePadding(4);
setButtonDrawable(drawable);
}
@Override
protected void onDraw(Canvas canvas) {
super.onDraw(canvas);
}
public MyCheckBox(Context context, AttributeSet attrs, int defStyleAttr) {
super(context, attrs, defStyleAttr);
}
@Override
public void setButtonDrawable(int resId) {
setButtonDrawable(AppCompatResources.getDrawable(getContext(), resId));
}
//一定要在设置 Drawable 之前设置 否者不生效
public void setDrawbleSize(int drawbleW, int drawbleH) {
this.drawbleW = drawbleW;
this.drawbleH = drawbleH;
}
@Override
public void setButtonDrawable(Drawable buttonDrawable) {
if (buttonDrawable != null) {
buttonDrawable.setBounds(0, 0, drawbleW, drawbleH);
setCompoundDrawables(buttonDrawable, null, null, null);
}
}
}
网友评论