Need help with noDrawable?
Click the “chat” button below for chat support from the developer who created it, or find similar developers for support.

About the developer

whataa
547 Stars 57 Forks Apache License 2.0 8 Commits 7 Opened issues

Description

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

Services available

!
?

Need anything else?

Contributors list

# 60,918
Java
network...
Kotlin
bytecod...
1 commit

中文 | English

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}'
    }  
    
  2. 让你的项目支持DataBinding:
android {
    ...
    dataBinding {
        enabled = true
    }
}

使用

  1. 将你的布局转化为DataBinding的形式:
    

  1. 在需要的View标签中声明drawable属性(注意,没有限定符):

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

    ...
    
    ...

  1. 在Activity中应用你的布局:

假设你的布局文件名为activitymain.xml ``` DataBindingUtil.setContentView(this, R.layout.activitymain); ```

现在,运行看看效果吧。

属性文档

说明:本项目仅提供对日常开发中最常用的属性支持,并非支持所有drawable属性。

属性名

说明 用例
drawableshapeMode shape的类型,参考
@ShapeMode
注解
@{0}
drawablesolidColor solid标签的颜色 @{0xffffffff}
drawablestrokeColor stroke标签的颜色 @{0xffffffff}
drawablestrokeWidth stroke标签的宽度 @{1}
drawablestrokeDash stroke标签的虚线中的实线段长度 @{2}
drawablestrokeDashGap stroke标签的虚线中的虚线段长度 @{2}
drawableradius corner标签的圆角 @{10}
drawableradiusLT corner标签的圆角-左上 @{10}
drawableradiusLB corner标签的圆角-左下 @{10}
drawableradiusRT corner标签的圆角-右上 @{10}
drawableradiusRB corner标签的圆角-右下 @{10}
drawablestartColor gradient标签的渐变起始色 @{0xffffffff}
drawablecenterColor gradient标签的渐变中间色 @{0xffffffff}
drawableendColor gradient标签的渐变结束色 @{0xffffffff}
drawableorientation gradient标签的渐变方向,参考@Orientation注解 @{0}
drawablegradientType gradient标签的渐变类型,参考@GradientType注解 @{0}
drawableradialCenterX gradient标签的radial类型的中心X,0~1 @{0.5}
drawableradialCenterY gradient标签的radial类型的中心Y,0~1 @{0.5}
drawableradialRadius gradient标签的radial类型的半径 @{10}
drawablewidth size标签的宽 @{10}
drawableheight size标签的高 @{10}
drawablemarginLeft inset标签的insetLeft @{-1}
drawablemarginTop inset标签的insetTop @{-1}
drawablemarginRight inset标签的insetght @{-1}
drawablemarginBottom inset标签的insetbottom @{-1}
drawableringThickness shape为ring类型时的厚度 @{10}
drawableringThicknessRatio shape为ring类型时的厚度比例 @{1}
drawableringInnerRadius shape为ring类型时的内径半径 @{10}
drawable_ringInnerRadiusRatio shape为ring类型时的内径半径比例 @{1}

同时还支持selector标签的常用状态,包括:

checked, checkable, enabled, focused, pressed, selected
,对应以上的属性名如下举例:
  • drawablecheckedsolidColor
  • drawablecheckablesolidColor
  • drawableenabledsolidColor
  • ...

另外,还提供了直接指定drawable.xml引用的属性,如下举例:

属性名

说明 用例
drawable 普通状态下的drawable引用属性 @{@drawable/shapebutton}
drawablechecked checked状态下的drawable引用属性 @{@drawable/shapebutton}
drawablecheckable checkable状态下的drawable引用属性 @{@drawable/shapebutton}
drawableenabled enabled状态下的drawable引用属性 @{@drawable/shapebutton}
drawablefocused focused状态下的drawable引用属性 @{@drawable/shapebutton}
drawablepressed pressed状态下的drawable引用属性 @{@drawable/shapebutton}
drawableselected 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

We use cookies. If you continue to browse the site, you agree to the use of cookies. For more information on our use of cookies please see our Privacy Policy.