45

GitHub - whataa/noDrawable: 一个旨在减少99%的drawable.xml文件的库,可直接在布局...

 5 years ago
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 API platform License Build Status

Nodrawable是一个旨在减少99%的drawable.xml文件的库,可直接在布局文件中对任意View声明drawable属性。

方案原理:一种巧妙的drawable.xml替代方案

演示Demo:一种巧妙的drawable.xml替代方案-效果篇

特性

① 成本低

仅需开启DataBinding,核心仅一个方法;

② 高可读性

直接在布局中的View标签声明drawable属性,对View最终效果一目了然;

③ 适配任意View

像使用View自身的属性一样,作用于任何View;

集成

你可以按照以下方式集成,也可以直接拷贝库文件到项目中,仅2个类。

  1. 在root's build.gradle中加入Jitpack仓库:
allprojects {
    repositories {
        ...
        maven { url 'https://jitpack.io' }
    }
}
  1. 添加依赖到你的app's build.gradle中
dependencies {
    ...
    implementation 'com.github.whataa:noDrawable:${RELEASE}'
}  
  1. 让你的项目支持DataBinding:
android {
    ...
    dataBinding {
        enabled = true
    }
}

使用

  1. 将你的布局转化为DataBinding的形式:
<layout>
    <!-- 你的布局内容 -->
<layout>
  1. 在需要的View标签中声明drawable属性(注意,没有限定符):

假如一个Button的背景是圆角,并且是红色的

<layout>
    ...
    <Button
        drawable_radius="@{10}"
        drawable_solidColor="@{0xffff0000}"
        android:layout_width="150dp"
        android:layout_height="50dp" />
    ...
<layout>
  1. 在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值用以表示对应的枚举类型,用以提高可读性;
  • 有些属性添加后可能不是你想要的效果,你可以参考该 链接 查看用法是否正确(个人觉得该链接的文章写得非常好);
  • 编译错误出现:cannot find symbol class DataBinderMapperImpl 时,请查看issues#1

限制

  • 最低支持的Android SDK版本为 16 ;
  • 仅支持绝大多数常用的drawable属性,其它属性可自行扩展;
  • 由DataBinding的特性决定,drawable效果在布局编辑器中无法实时预览;

开源协议

Apache-2.0


About Joyk


Aggregate valuable and interesting links.
Joyk means Joy of geeK