一个旨在减少99%的drawable.xml文件的库,可直接在布局文件中对任意View声明drawable属性。
中文 | English
Nodrawable是一个旨在减少99%的drawable.xml文件的库,可直接在布局文件中对任意View声明drawable属性。
演示Demo:一种巧妙的drawable.xml替代方案-效果篇
仅需开启DataBinding,核心仅一个方法;
直接在布局中的View标签声明drawable属性,对View最终效果一目了然;
像使用View自身的属性一样,作用于任何View;
你可以按照以下方式集成,也可以直接拷贝库文件到项目中,仅2个类。
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}dependencies {
...
implementation 'com.github.whataa:noDrawable:${RELEASE}'
} android {
...
dataBinding {
enabled = true
}
}
假如一个Button的背景是圆角,并且是红色的
...
...
假设你的布局文件名为activity_main.xml
DataBindingUtil.setContentView(this, R.layout.activity_main);现在,运行看看效果吧。
说明:本项目仅提供对日常开发中最常用的属性支持,并非支持所有drawable属性。
| 属性名 | 说明 | 用例 |
|---|---|---|
| drawable_shapeMode | shape的类型,参考@ShapeMode注解 |
@{0} |
| drawable_solidColor | solid标签的颜色 | @{0xffffffff} |
| drawable_strokeColor | stroke标签的颜色 | @{0xffffffff} |
| drawable_strokeWidth | stroke标签的宽度 | @{1} |
| drawable_strokeDash | stroke标签的虚线中的实线段长度 | @{2} |
| drawable_strokeDashGap | stroke标签的虚线中的虚线段长度 | @{2} |
| drawable_radius | corner标签的圆角 | @{10} |
| drawable_radiusLT | corner标签的圆角-左上 | @{10} |
| drawable_radiusLB | corner标签的圆角-左下 | @{10} |
| drawable_radiusRT | corner标签的圆角-右上 | @{10} |
| drawable_radiusRB | corner标签的圆角-右下 | @{10} |
| drawable_startColor | gradient标签的渐变起始色 | @{0xffffffff} |
| drawable_centerColor | gradient标签的渐变中间色 | @{0xffffffff} |
| drawable_endColor | gradient标签的渐变结束色 | @{0xffffffff} |
| drawable_orientation | gradient标签的渐变方向,参考@Orientation注解 | @{0} |
| drawable_gradientType | gradient标签的渐变类型,参考@GradientType注解 | @{0} |
| drawable_radialCenterX | gradient标签的radial类型的中心X,0~1 | @{0.5} |
| drawable_radialCenterY | gradient标签的radial类型的中心Y,0~1 | @{0.5} |
| drawable_radialRadius | gradient标签的radial类型的半径 | @{10} |
| drawable_width | size标签的宽 | @{10} |
| drawable_height | size标签的高 | @{10} |
| drawable_marginLeft | inset标签的insetLeft | @{-1} |
| drawable_marginTop | inset标签的insetTop | @{-1} |
| drawable_marginRight | inset标签的insetght | @{-1} |
| drawable_marginBottom | inset标签的insetbottom | @{-1} |
| drawable_ringThickness | shape为ring类型时的厚度 | @{10} |
| drawable_ringThicknessRatio | shape为ring类型时的厚度比例 | @{1} |
| drawable_ringInnerRadius | shape为ring类型时的内径半径 | @{10} |
| drawable_ringInnerRadiusRatio | shape为ring类型时的内径半径比例 | @{1} |
同时还支持selector标签的常用状态,包括:checked, checkable, enabled, focused, pressed, selected,对应以上的属性名如下举例:
另外,还提供了直接指定drawable.xml引用的属性,如下举例:
| 属性名 | 说明 | 用例 |
|---|---|---|
| drawable | 普通状态下的drawable引用属性 | @{@drawable/shape_button} |
| drawable_checked | checked状态下的drawable引用属性 | @{@drawable/shape_button} |
| drawable_checkable | checkable状态下的drawable引用属性 | @{@drawable/shape_button} |
| drawable_enabled | enabled状态下的drawable引用属性 | @{@drawable/shape_button} |
| drawable_focused | focused状态下的drawable引用属性 | @{@drawable/shape_button} |
| drawable_pressed | pressed状态下的drawable引用属性 | @{@drawable/shape_button} |
| drawable_selected | selected状态下的drawable引用属性 | @{@drawable/shape_button} |
android: 或 app: 的限定符;@{}的形式,这是DataBinding的约束;@{}中所有的数值支持 整型 和 浮点型,在内部统一处理为了dp单位,具体可查看 Drawables.create 方法;暂无开放 Issues,或尚未同步最近议题。