Skip to content

QMUIRoundButtonDrawable

chanthuang edited this page Apr 24, 2019 · 4 revisions

QMUIRoundButtonDrawable 是一个提供了圆角功能的 Drawable。

主要方法

方法名 描述
setBgData(ColorStateList colors) 设置背景色
(只支持纯色,不支持 Bitmap 或 Drawable)
setStrokeData(int width, ColorStateList colors) 设置描边宽度和颜色
setIsRadiusAdjustBounds(boolean isRadiusAdjustBounds) 设置圆角大小是否自动适应为宿主 View 的宽高两者最小者的一半(Math.min(width, height)/2)
fromAttributeSet(Context context, AttributeSet attrs, int defStyleAttr) 根据 View 的 xml 属性创建一个 QMUIRoundButtonDrawable 实例(见下文)

通过 View 的 xml 属性构造 QMUIRoundButtonDrawable,使 View 支持圆角功能

通过静态方法 QMUIRoundButtonDrawable.fromAttributeSet(Context context, AttributeSet attrs, int defStyleAttr) 方法可以创建一个 QMUIRoundButtonDrawable,将该 Drawable 设置给 View 作为背景,可使 View 支持圆角。

  1. 在 View 的构造函数中调用 QMUIRoundButtonDrawable.fromAttributeSet(Context context, AttributeSet attrs, int defStyleAttr) 方法生成 drawable,并作为自己的 background。如:
    public class QMUIRoundFrameLayout extends FrameLayout {
    
        public QMUIRoundFrameLayout(Context context) {
            super(context);
            init(context, null, 0);
        }
    
        public QMUIRoundFrameLayout(Context context, AttributeSet attrs) {
            super(context, attrs);
            init(context, attrs, 0);
        }
    
        public QMUIRoundFrameLayout(Context context, AttributeSet attrs, int defStyleAttr) {
            super(context, attrs, defStyleAttr);
            init(context, attrs, defStyleAttr);
        }
    
        private void init(Context context, AttributeSet attrs, int defStyleAttr) {
            QMUIRoundButtonDrawable bg = QMUIRoundButtonDrawable.fromAttributeSet(context, attrs, defStyleAttr);
            QMUIViewHelper.setBackgroundKeepingPadding(this, bg);
        }
    }
    
  2. 在 attrs.xml 中定义 ,将该 View 的 className 作为 name 属性的值,如:
    <declare-styleable name="QMUIRoundFrameLayout">
        <attr name="qmui_backgroundColor"/>
        <attr name="qmui_borderColor"/>
        <attr name="qmui_borderWidth"/>
        <attr name="qmui_isRadiusAdjustBounds"/>
        <attr name="qmui_radius"/>
        <attr name="qmui_radiusTopLeft"/>
        <attr name="qmui_radiusTopRight"/>
        <attr name="qmui_radiusBottomLeft"/>
        <attr name="qmui_radiusBottomRight"/>
    </declare-styleable>
    
  3. 这样就能使该 View 支持以上 xml 属性,如这样使用:
    <com.qmuiteam.qmui.widget.roundwidget.QMUIRoundFrameLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        app:qmui_backgroundColor="@color/qmui_config_color_red"
        app:qmui_isRadiusAdjustBounds="true">
    
    </com.qmuiteam.qmui.widget.roundwidget.QMUIRoundFrameLayout>
    

xml 属性

对于通过 View 的 xml 属性构造 QMUIRoundButtonDrawable 的情况,QMUIRoundButtonDrawable 支持识别该 View 的以下属性:

属性名 描述
qmui_backgroundColor 背景颜色
qmui_borderColor 边框颜色
qmui_borderWidth 边框宽度
qmui_radiusTopLeft 左上角圆角大小
qmui_radiusTopRight 右上角圆角大小
qmui_radiusBottomLeft 左下角圆角大小
qmui_radiusBottomRight 右下角圆角大小
qmui_radius 四个角的圆角大小
注意:若使用 radiusTopLeft、qmui_radiusTopRight、qmui_radiusBottomRight、qmui_radiusBottomRight 指定了某一个角的圆角大小且其值大于0,则该属性无效
qmui_isRadiusAdjustBounds 是否根据宿主 View 的大小自适应圆角
注意:若使用 radiusTopLeft、qmui_radiusTopRight、qmui_radiusBottomRight、qmui_radiusBottomRight、qmui_radius 指定了某一个角或所有角的圆角大小且其值大于0,则该属性无效

注意

因为该控件的圆角采用 View 的 background 实现,所以与原生的 android:background 有冲突。

相关类