45
GitHub - whataa/noDrawable: 一个旨在减少99%的drawable.xml文件的库,可直接在布局...
source link: https://github.com/whataa/noDrawable
Go to the source link to view the article. You can view the picture content, updated content and better typesetting reading experience. If the link is broken, please click the button below to view the snapshot at that time.
README.md
Here is English Doc
NoDrawable
Nodrawable是一个旨在减少99%的drawable.xml文件的库,可直接在布局文件中对任意View声明drawable属性。
演示Demo:一种巧妙的drawable.xml替代方案-效果篇
特性
① 成本低
仅需开启DataBinding,核心仅一个方法;
② 高可读性
直接在布局中的View标签声明drawable属性,对View最终效果一目了然;
③ 适配任意View
像使用View自身的属性一样,作用于任何View;
集成
你可以按照以下方式集成,也可以直接拷贝库文件到项目中,仅2个类。
- 在root's build.gradle中加入Jitpack仓库:
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
dependencies {
...
implementation 'com.github.whataa:noDrawable:${RELEASE}'
}
- 让你的项目支持DataBinding:
android {
...
dataBinding {
enabled = true
}
}
使用
- 将你的布局转化为DataBinding的形式:
<layout>
<!-- 你的布局内容 -->
<layout>
- 在需要的View标签中声明drawable属性(注意,没有限定符):
假如一个Button的背景是圆角,并且是红色的
<layout>
...
<Button
drawable_radius="@{10}"
drawable_solidColor="@{0xffff0000}"
android:layout_width="150dp"
android:layout_height="50dp" />
...
<layout>
- 在Activity中应用你的布局:
假设你的布局文件名为activity_main.xml
DataBindingUtil.setContentView(this, R.layout.activity_main);
现在,运行看看效果吧。
属性文档
属性名 说明 用例 drawable_shapeMode shape的类型,参考说明:本项目仅提供对日常开发中最常用的属性支持,并非支持所有drawable属性。
@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_checked_solidColor
- drawable_checkable_solidColor
- drawable_enabled_solidColor
- ...
另外,还提供了直接指定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的方案来引入(即不能用setContentView(xxx)),否则没有效果;
- 数据绑定必须使用
@{}
的形式,这是DataBinding的约束; - 本库以在内部将
@{}
中的数值处理为了dp单位,具体可查看Drawables.create
方法; - 本库在values文件中预置了几个可选的integer值用以表示对应的枚举类型,用以提高可读性;
- 有些属性添加后可能不是你想要的效果,你可以参考该 链接 查看用法是否正确(个人觉得该链接的文章写得非常好);
- 编译错误出现:cannot find symbol class DataBinderMapperImpl 时,请查看issues#1
限制
- 最低支持的Android SDK版本为 16 ;
- 仅支持绝大多数常用的drawable属性,其它属性可自行扩展;
- 由DataBinding的特性决定,drawable效果在布局编辑器中无法实时预览;
开源协议
Recommend
About Joyk
Aggregate valuable and interesting links.
Joyk means Joy of geeK