-
Notifications
You must be signed in to change notification settings - Fork 2.7k
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 实例(见下文) |
通过静态方法 QMUIRoundButtonDrawable.fromAttributeSet(Context context, AttributeSet attrs, int defStyleAttr)
方法可以创建一个 QMUIRoundButtonDrawable
,将该 Drawable 设置给 View 作为背景,可使 View 支持圆角。
- 在 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); } }
- 在 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>
- 这样就能使该 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>
对于通过 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
有冲突。