import android.content.Context; import android.content.res.TypedArray; import android.graphics.drawable.Drawable; import android.util.AttributeSet; import android.widget.RadioButton; import info.mixun.cate.catephoneclient.R; /** * Created by Administrator on 2017/9/30. */ public class MyRadioButton extends RadioButton { private int with, height; public MyRadioButton(Context context) { this(context, null); } public MyRadioButton(Context context, AttributeSet attrs) { this(context, attrs, 0); } public MyRadioButton(Context context, AttributeSet attrs, int defStyleAttr) { super(context, attrs, defStyleAttr); TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.MyRadioButton); with = a.getDimensionPixelOffset(R.styleable.MyRadioButton_drawable_with, 0); height = a.getDimensionPixelOffset(R.styleable.MyRadioButton_drawable_height, 0); Drawable drawableTop = a.getDrawable(R.styleable.MyRadioButton_android_drawableTop); Drawable drawableLeft = a.getDrawable(R.styleable.MyRadioButton_android_drawableStart); Drawable drawableBottom = a.getDrawable(R.styleable.MyRadioButton_android_drawableBottom); Drawable drawableRight = a.getDrawable(R.styleable.MyRadioButton_android_drawableEnd); //释放资源 a.recycle(); setCompoundDrawablesWithIntrinsicBounds(drawableLeft, drawableTop, drawableRight, drawableBottom); } @Override public void setCompoundDrawablesWithIntrinsicBounds(Drawable left, Drawable top, Drawable right, Drawable bottom) { super.setCompoundDrawablesWithIntrinsicBounds(left, top, right, bottom); if (top != null) top.setBounds(0, 0, with, height); if(left!=null) left.setBounds(0,0,with,height); if(right!=null) right.setBounds(0,0,with,height); if(bottom!=null) bottom.setBounds(0,0,with,height); setCompoundDrawables(left, top, right, bottom); } }
<declare-styleable name="MyRadioButton" parent="RadioButton"> <attr name="drawable_with" format="dimension"/> <attr name="drawable_height" format="dimension"/> <attr name="android:drawableTop"/> <attr name="android:drawableStart"/> <attr name="android:drawableEnd"/> <attr name="android:drawableBottom"/> </declare-styleable>