{"id":19682722,"url":"https://github.com/whataa/nodrawable","last_synced_at":"2025-04-05T05:08:25.378Z","repository":{"id":174901061,"uuid":"147943302","full_name":"whataa/noDrawable","owner":"whataa","description":"一个旨在减少99%的drawable.xml文件的库，可直接在布局文件中对任意View声明drawable属性。","archived":false,"fork":false,"pushed_at":"2019-10-29T01:29:23.000Z","size":269,"stargazers_count":679,"open_issues_count":9,"forks_count":69,"subscribers_count":8,"default_branch":"master","last_synced_at":"2025-03-29T04:09:46.906Z","etag":null,"topics":["android-library","drawable","kill-drawable","reduce-drawable","remove-drawable","replace-drawable"],"latest_commit_sha":null,"homepage":null,"language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"apache-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/whataa.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":"CONTRIBUTING.md","funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null}},"created_at":"2018-09-08T15:00:02.000Z","updated_at":"2025-03-28T06:54:13.000Z","dependencies_parsed_at":null,"dependency_job_id":"fa18b817-0967-4f87-aa2f-dbe234e1dc3c","html_url":"https://github.com/whataa/noDrawable","commit_stats":null,"previous_names":["whataa/nodrawable"],"tags_count":3,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whataa%2FnoDrawable","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whataa%2FnoDrawable/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whataa%2FnoDrawable/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/whataa%2FnoDrawable/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/whataa","download_url":"https://codeload.github.com/whataa/noDrawable/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247289428,"owners_count":20914464,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["android-library","drawable","kill-drawable","reduce-drawable","remove-drawable","replace-drawable"],"created_at":"2024-11-11T18:11:50.621Z","updated_at":"2025-04-05T05:08:25.349Z","avatar_url":"https://github.com/whataa.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"中文 | [English](https://github.com/whataa/noDrawable/blob/master/README_EN.md)\n\n# NoDrawable [![API](https://img.shields.io/badge/API-16%2B-brightgreen.svg?style=flat)](https://android-arsenal.com/api?level=16) [![platform](https://img.shields.io/badge/platform-android-brightgreen.svg)](https://developer.android.com/index.html) [![License](https://img.shields.io/badge/license-Apache%202.0-blue.svg)](https://github.com/whataa/noDrawable/blob/master/LICENSE) [![Build Status](https://travis-ci.org/whataa/noDrawable.svg?branch=master)](https://travis-ci.org/whataa/noDrawable)\n\nNodrawable是一个旨在减少99%的drawable.xml文件的库，可直接在布局文件中对任意View声明drawable属性。\n\n方案原理：[一种巧妙的drawable.xml替代方案](https://juejin.im/post/5b95c6a0e51d450e664b0aa0)\n\n演示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/)\n\n## 特性\n\n#### ① 成本低\n\n仅需开启DataBinding，核心仅一个方法；\n\n#### ② 高可读性\n\n直接在布局中的View标签声明drawable属性，对View最终效果一目了然；\n\n#### ③ 适配任意View\n\n像使用View自身的属性一样，作用于任何View；\n\n## 集成\n\n\u003e 你可以按照以下方式集成，也可以直接拷贝库文件到项目中，仅2个类。\n\n1. 在root's build.gradle中加入Jitpack仓库：\n\n```\nallprojects {\n    repositories {\n        ...\n        maven { url 'https://jitpack.io' }\n    }\n}\n```\n2. 添加依赖到你的app's build.gradle中 [![](https://jitpack.io/v/whataa/noDrawable.svg)](https://jitpack.io/#whataa/noDrawable)\n```\ndependencies {\n    ...\n    implementation 'com.github.whataa:noDrawable:${RELEASE}'\n}  \n```\n3. 让你的项目支持DataBinding：\n\n```\nandroid {\n    ...\n    dataBinding {\n        enabled = true\n    }\n}\n```\n\n\n## 使用\n\n1. 将你的布局转化为DataBinding的形式：\n\n\n```\n\u003clayout\u003e\n    \u003c!-- 你的布局内容 --\u003e\n\u003clayout\u003e\n```\n2. 在需要的View标签中声明drawable属性（**注意，没有限定符**）：\n\n\u003e 假如一个Button的背景是圆角，并且是红色的\n\n\n```\n\u003clayout\u003e\n    ...\n    \u003cButton\n        drawable_radius=\"@{10}\"\n        drawable_solidColor=\"@{0xffff0000}\"\n        android:layout_width=\"150dp\"\n        android:layout_height=\"50dp\" /\u003e\n    ...\n\u003clayout\u003e\n```\n\n\n3. 在Activity中应用你的布局：\n\n\u003e 假设你的布局文件名为activity_main.xml\n```\nDataBindingUtil.setContentView(this, R.layout.activity_main);\n```\n\n现在，运行看看效果吧。\n\n## 属性文档\n\n\u003e 说明：本项目仅提供对日常开发中最常用的属性支持，并非支持所有drawable属性。\n\n属性名 | 说明 | 用例\n---|---|---\ndrawable_shapeMode | shape的类型，参考`@ShapeMode`注解 | `@{0}` \ndrawable_solidColor | solid标签的颜色 | @{0xffffffff}\ndrawable_strokeColor | stroke标签的颜色 | @{0xffffffff}\ndrawable_strokeWidth | stroke标签的宽度 | @{1}\ndrawable_strokeDash | stroke标签的虚线中的实线段长度 | @{2}\ndrawable_strokeDashGap | stroke标签的虚线中的虚线段长度 | @{2}\ndrawable_radius | corner标签的圆角 | @{10}\ndrawable_radiusLT | corner标签的圆角-左上 | @{10}\ndrawable_radiusLB |corner标签的圆角-左下 | @{10}\ndrawable_radiusRT |corner标签的圆角-右上 | @{10}\ndrawable_radiusRB |corner标签的圆角-右下 | @{10}\ndrawable_startColor |gradient标签的渐变起始色 | @{0xffffffff}\ndrawable_centerColor |gradient标签的渐变中间色 | @{0xffffffff}\ndrawable_endColor |gradient标签的渐变结束色 | @{0xffffffff}\ndrawable_orientation |gradient标签的渐变方向，参考@Orientation注解 | @{0}\ndrawable_gradientType |gradient标签的渐变类型，参考@GradientType注解 | @{0}\ndrawable_radialCenterX |gradient标签的radial类型的中心X，0~1 | @{0.5}\ndrawable_radialCenterY |gradient标签的radial类型的中心Y，0~1 | @{0.5}\ndrawable_radialRadius |gradient标签的radial类型的半径 | @{10}\ndrawable_width | size标签的宽 | @{10}\ndrawable_height |size标签的高 | @{10}\ndrawable_marginLeft | inset标签的insetLeft | @{-1}\ndrawable_marginTop | inset标签的insetTop | @{-1}\ndrawable_marginRight | inset标签的insetght | @{-1}\ndrawable_marginBottom | inset标签的insetbottom | @{-1}\ndrawable_ringThickness |shape为ring类型时的厚度 | @{10}\ndrawable_ringThicknessRatio |shape为ring类型时的厚度比例 | @{1}\ndrawable_ringInnerRadius |shape为ring类型时的内径半径 | @{10}\ndrawable_ringInnerRadiusRatio |shape为ring类型时的内径半径比例 | @{1}\n\n\n同时还支持selector标签的常用状态，包括：`checked, checkable, enabled, focused, pressed, selected`，对应以上的属性名如下举例：\n\n- drawable_checked_solidColor\n- drawable_checkable_solidColor\n- drawable_enabled_solidColor\n- ...\n\n另外，还提供了直接指定drawable.xml引用的属性，如下举例：\n\n属性名 | 说明 | 用例\n---|---|--\ndrawable | 普通状态下的drawable引用属性 | @{@drawable/shape_button}\ndrawable_checked | checked状态下的drawable引用属性 | @{@drawable/shape_button}\ndrawable_checkable | checkable状态下的drawable引用属性 | @{@drawable/shape_button}\ndrawable_enabled | enabled状态下的drawable引用属性 | @{@drawable/shape_button}\ndrawable_focused | focused状态下的drawable引用属性 | @{@drawable/shape_button}\ndrawable_pressed | pressed状态下的drawable引用属性 | @{@drawable/shape_button}\ndrawable_selected | selected状态下的drawable引用属性 | @{@drawable/shape_button}\n\n## 注意事项\n\n- 属性开头没有形如 `android:` 或 `app:` 的限定符；\n- 引入布局时，必须按照DataBinding的方案来引入（即不能用setContentView(xxx)），否则没有效果；\n- 数据绑定必须使用`@{}`的形式，这是DataBinding的约束；\n- `@{}`中所有的数值支持 整型 和 浮点型，在内部统一处理为了dp单位，具体可查看 `Drawables.create` 方法；\n- 本库在values文件中预置了几个可选的integer值用以表示对应的枚举类型，用以提高可读性；\n- 有些属性添加后可能不是你想要的效果，你可以参考该 [链接](https://keeganlee.me/post/android/20150830) 查看用法是否正确（个人觉得该链接的文章写得非常好）；\n- 编译错误出现：cannot find symbol class DataBinderMapperImpl 时，请查看[issues#1](https://github.com/whataa/noDrawable/issues/1)\n\n## 限制\n\n- 最低支持的Android SDK版本为 16 ；\n- 仅支持绝大多数常用的drawable属性，其它属性可自行扩展；\n- 由DataBinding的特性决定，drawable效果在布局编辑器中无法实时预览；\n\n## 开源协议\n\n[Apache-2.0](https://opensource.org/licenses/Apache-2.0)","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwhataa%2Fnodrawable","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fwhataa%2Fnodrawable","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fwhataa%2Fnodrawable/lists"}