https://github.com/whataa/nodrawable
一个旨在减少99%的drawable.xml文件的库,可直接在布局文件中对任意View声明drawable属性。
https://github.com/whataa/nodrawable
android-library drawable kill-drawable reduce-drawable remove-drawable replace-drawable
Last synced: 25 days ago
JSON representation
一个旨在减少99%的drawable.xml文件的库,可直接在布局文件中对任意View声明drawable属性。
- Host: GitHub
- URL: https://github.com/whataa/nodrawable
- Owner: whataa
- License: apache-2.0
- Created: 2018-09-08T15:00:02.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-10-29T01:29:23.000Z (over 5 years ago)
- Last Synced: 2025-03-29T04:09:46.906Z (about 1 month ago)
- Topics: android-library, drawable, kill-drawable, reduce-drawable, remove-drawable, replace-drawable
- Language: Java
- Size: 263 KB
- Stars: 679
- Watchers: 8
- Forks: 69
- Open Issues: 9
-
Metadata Files:
- Readme: README.md
- Contributing: CONTRIBUTING.md
- License: LICENSE
Awesome Lists containing this project
README
中文 | [English](https://github.com/whataa/noDrawable/blob/master/README_EN.md)
# NoDrawable [](https://android-arsenal.com/api?level=16) [](https://developer.android.com/index.html) [](https://github.com/whataa/noDrawable/blob/master/LICENSE) [](https://travis-ci.org/whataa/noDrawable)
Nodrawable是一个旨在减少99%的drawable.xml文件的库,可直接在布局文件中对任意View声明drawable属性。
方案原理:[一种巧妙的drawable.xml替代方案](https://juejin.im/post/5b95c6a0e51d450e664b0aa0)
演示Demo:[一种巧妙的drawable.xml替代方案-效果篇](http://linjiang.tech/2018/09/08/%E4%B8%80%E7%A7%8D%E5%B7%A7%E5%A6%99%E7%9A%84drawable.xml%E6%9B%BF%E4%BB%A3%E6%96%B9%E6%A1%88-%E6%95%88%E6%9E%9C%E7%AF%87/)
## 特性
#### ① 成本低
仅需开启DataBinding,核心仅一个方法;
#### ② 高可读性
直接在布局中的View标签声明drawable属性,对View最终效果一目了然;
#### ③ 适配任意View
像使用View自身的属性一样,作用于任何View;
## 集成
> 你可以按照以下方式集成,也可以直接拷贝库文件到项目中,仅2个类。
1. 在root's build.gradle中加入Jitpack仓库:
```
allprojects {
repositories {
...
maven { url 'https://jitpack.io' }
}
}
```
2. 添加依赖到你的app's build.gradle中 [](https://jitpack.io/#whataa/noDrawable)
```
dependencies {
...
implementation 'com.github.whataa:noDrawable:${RELEASE}'
}
```
3. 让你的项目支持DataBinding:```
android {
...
dataBinding {
enabled = true
}
}
```## 使用
1. 将你的布局转化为DataBinding的形式:
```
```
2. 在需要的View标签中声明drawable属性(**注意,没有限定符**):> 假如一个Button的背景是圆角,并且是红色的
```
...
...```
3. 在Activity中应用你的布局:
> 假设你的布局文件名为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_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值用以表示对应的枚举类型,用以提高可读性;
- 有些属性添加后可能不是你想要的效果,你可以参考该 [链接](https://keeganlee.me/post/android/20150830) 查看用法是否正确(个人觉得该链接的文章写得非常好);
- 编译错误出现:cannot find symbol class DataBinderMapperImpl 时,请查看[issues#1](https://github.com/whataa/noDrawable/issues/1)## 限制
- 最低支持的Android SDK版本为 16 ;
- 仅支持绝大多数常用的drawable属性,其它属性可自行扩展;
- 由DataBinding的特性决定,drawable效果在布局编辑器中无法实时预览;## 开源协议
[Apache-2.0](https://opensource.org/licenses/Apache-2.0)