# EasyAndroid **Repository Path**: 1059232202/EasyAndroid ## Basic Information - **Project Name**: EasyAndroid - **Description**: No description available - **Primary Language**: Android - **License**: Apache-2.0 - **Default Branch**: master - **Homepage**: None - **GVP Project**: No ## Statistics - **Stars**: 0 - **Forks**: 0 - **Created**: 2024-09-03 - **Last Updated**: 2024-09-03 ## Categories & Tags **Categories**: Uncategorized **Tags**: None ## README # EasyAndroid [](https://jitpack.io/#yjfnypeu/EasyAndroid) 在平时的开发过程中,我们经常会需要使用到一些基础功能组件,比如Toast,比如Log等。 而这些功能组件,在开发时需要使用到的功能点其实相当有限,所以这也意味着,我们对此类组件的要求是:**简单、轻量、易用**!相对应的,此类组件的封装库,也应该尽量实现得**轻巧精练** **EasyAndroid**即是专门针对此种需求所设计的一款`基础组件集成库` ### 宗旨 #### 1. 设计独立 > 组件间独立存在,不相互依赖,且若只需要集成库中的部分组件。也可以很方便的`只copy对应的组件文件`进行使用 #### 2. 设计轻巧 > 因为是组件集成库,所以要求每个组件的设计尽量精练、轻巧。避免因为一个小功能而引入大量无用代码. > > 每个组件的方法数均`不超过100`. 大部分组件方法数甚至`不超过50`。 ### 添加依赖 1. 添加jitpack仓库依赖 ``` maven { url 'https://jitpack.io' } ``` 2. 添加依赖 lastest_version = [](https://jitpack.io/#yjfnypeu/EasyAndroid) ``` implementation "com.github.yjfnypeu:EasyAndroid:$lastest_version" ``` 3. 初始化 在Application中调用初识化方法: ``` EasyAndroid.init(application) ``` 然后即可直接使用 ### Attention!!! 由于此为`轻量组件集成库`, 所以框架中包含了多个`独立`的应用组件提供使用。 但是有的时候,如果你只需要使用框架中的少数或者`个别的组件`。可以直接`copy对应的组件源码文件`到工程中去直接使用。 请注意:大部分组件均是完全独立存在的。直接copy源文件即可正常使用。 而部分组件会需要依赖EasyAndroid类。去获取可用的`Application Context`实例进行使用。对于这部分的组件。 替换内部`EasyAndroid.getApplicationContext()`为你们项目自身的application context即可。 ### 目录索引 - [EasyGuideLayer](#easyguidelayer): 界面蒙层引导组件 - [EasySharedPreferences](#easysharedpreferences): SharedPreferences存取组件 - [EasyDimension](#easydimension): 尺寸转换组件 - [EasyFormatter](#easyformatter): 数据格式化排版组件 - [EasyLog](#easylog): 日志打印组件 - [EasyToast](#easytoast): Toast通知组件 - [EasyReflect](#easyreflect): 反射操作组件 - [EasyActivityResult](#easyactivityresult): onActivityResult解耦组件 - [EasyPermissions](#easypermissions): 动态权限申请组件 - [EasyExecutor](#easyexecutor): 线程池封装组件 - [EasyBundle](#easybundle): Bundle数据存取组件 - [EasyMedia](#EasyMedia): 从拍照、图库进行图片选择组件。 - [EasyImageGetter](#easyimagegetter): TextView加载html标签时,提供`img`标签的图片加载功能 - [MVP](#mvp): 简单MVP架构 ### [EasyGuideLayer](./docs/EasyGuideLayer.md) > [点我查看完整使用文档](./docs/EasyGuideLayer.md) > [点击下载组件源码文件进行使用](https://raw.githubusercontent.com/yjfnypeu/EasyAndroid/master/utils/src/main/java/com/haoge/easyandroid/easy/EasyGuideLayer.kt) - 链式调用。调用逻辑清晰直观 - 支持同时设置多个引导层 - 支持高亮区域的自定义绘制 - 支持高亮区域点击监听 - 支持指定任意View设置蒙层引导 - 支持进行蒙层展示、隐藏事件监听 使用示例: ``` // 创建引导层示例,并为引导层添加指定配置 val item = GuideItem.newInstance(view, padding) .setLayout(guideLayout)// 设置引导View .setGravity(Gravity.LEFT)// 设置引导View位置 .setOffsetProvider(provider)// 设置用于进行引导View的位置调整 .setHighLightShape(GuideItem.SHAPE_RECT)// 设置高亮区域绘制模式 .setOnViewAttachedListener(listener)// 设置引导View被添加到蒙层布局中时的通知监听 .setOnDrawHighLightCallback(callback)// 这是自定义高亮块绘制回调 .setOnHighLightClickListener(listener)// 设置高亮点击回调监听 // 创建蒙层实例并绑定引导层,进行展示: EasyGuideLayer.with(activity) .setBackgroundColor(color)// 蒙层背景色 .setOnGuideShownListener(lambda)// 蒙层展示、消失监听 .addItem(item)// 绑定引导层实例 .setDismissOnClickOutside(false)// 设置点击到蒙层上的非点击区域时,是否自动让蒙层消失 .setDismissIfNoItems(true)// 设置当蒙层中一个引导层实例都没绑定时,自动让蒙层消失 .show()// 展示蒙层 ``` ### [EasyImageGetter](./docs/EasyImageGetter.md) > [点我查看完整使用文档](./docs/EasyImageGetter.md) > [点击下载组件源码文件进行使用](https://raw.githubusercontent.com/yjfnypeu/EasyAndroid/master/utils/src/main/java/com/haoge/easyandroid/easy/EasyImageGetter.kt) - 支持设置`placeholde`图片加载时占位图 - 支持设置`error`图片加载失败时的占位图 - 支持指定uri进行加载。不仅仅局限于网络图片。还包括加载本地图片、assets图片等。 - 支持自定义加载器:满足各种加载需求。 用户实例: ``` // 提供html文本数据 private val html = """
""".trimIndent()
// 提供展示的TextView控件
private val textView:TextView = getTextView()
EasyImageGetter.create()
// 设置图片加载时的占位图
.setPlaceHolder(R.drawable.placeholder)
// 设置图片加载失败时的占位图
.setError(R.drawable.error)
// 指定加载的html与tv控件即可
.loadHtml(html, textView)
```
### [EasyMedia](./docs/EasyPhoto.md)
> [点我查看完整使用文档](./docs/EasyPhoto.md)
> [点击下载组件源码文件进行使用](https://raw.githubusercontent.com/yjfnypeu/EasyAndroid/master/utils/src/main/java/com/haoge/easyandroid/easy/EasyMedia.kt)
> 从图库或者使用相机拍照获取图片的组件。
贡献者:[Vicent9920](https://github.com/Vicent9920)
- 支持链式调用
- 支持图片输出到指定地址
- 支持任意线程选择进行图片选择
用户实例:
```
val photo = EasyMedia()// 创建EasyMedia实例
// 是否需要进行裁剪
.setCrop(true|false)
// 指定创建的图片地址。
.setImgPath(imgPath:String)
// 通过设置回调,获取选择到的文件
photo.setCallback { file:File ->
// TODO 使用选择的文件进行操作
}
// 当然。不排除出现非预期的问题。所以也提供了错误回调
photo.setError { error:Exception ->
// TODO
}
// 跳转拍照并获取图片
photo.takePhoto(activity)
// 或者跳转图库进行图片选择
photo.selectPhoto(activity)
```
### [EasySharedPreferences](./docs/EasySharedPreferences.md)
> [点我查看完整使用文档](./docs/EasySharedPreferences.md)
> [点击下载组件源码文件进行使用](https://raw.githubusercontent.com/yjfnypeu/EasyAndroid/master/utils/src/main/java/com/haoge/easyandroid/easy/EasySharedPreferences.kt)
> 使用一个具体的实体类,进行SharedPreferences数据存取
- 通过具体的实体类进行SP数据存储操作。避免`key值硬编码`
- 自动同步,即使别的地方是`直接使用SharedPreferences进行赋值`,也能自动同步相关数据。
- 打破SharedPreferences限制。支持几乎任意类型数据存取
用法示例:
```
// 以SharedPreferences文件名为user_info,存储数据为username, age, address为例
// 1. 创建映射实体类
@PreferenceRename("user_info")
class User:PreferenceSupport() {
var username:String
var age:Int
var address:String
}
// 2. 进行读取
val user = EasySharedPreferences.load(User::class.java)
// 3. 进行修改
// 直接使用load出来的user实例进行数值修改
user.age = 16
user.username = "haoge"
// 修改完毕后,apply更新修改到SharedPreferences文件。
user.apply()
```
### [EasyDimension](./docs/EasyDimension.md)
> [点我查看完整使用文档](./docs/EasyDimension.md)
> [点击下载组件源码文件进行使用](https://raw.githubusercontent.com/yjfnypeu/EasyAndroid/master/utils/src/main/java/com/haoge/easyandroid/easy/EasyDimension.kt)
> 用于灵活的进行设备尺寸单位转换
>
> 支持全尺寸数值转换。
用法示例
```
// 转换10dp到px
EasyDimension.withDIP(10).toPX()
// 转换30sp到MM
EasyDimension.withSP(30).toMM()
```
### [EasyFormatter](./docs/EasyFormatter.md)
> [点我查看完整使用文档](./docs/EasyFormatter.md)
> [点击下载组件源码文件进行使用](https://raw.githubusercontent.com/yjfnypeu/EasyAndroid/master/utils/src/main/java/com/haoge/easyandroid/easy/EasyFormatter.kt)
> 用于对任意类型数据,进行格式化输出排版,结合log打印组件使用,使log输出展示更清晰
- 支持对`Set/List/Map/JSON/POJO`数据进行格式化排版
- 支持最高长度过滤:避免打印超长数据时造成版面浪费
用法示例:
```
// 创建待格式化数据
val any:Any = create()
// 使用formatter实例进行格式化
val result:String = EasyFormatter.DEFAULT.format(any)
```
### [EasyLog](./docs/EasyLog.md)
> [点我查看完整使用文档](./docs/EasyLog.md)
> [点击下载组件源码文件进行使用](https://raw.githubusercontent.com/yjfnypeu/EasyAndroid/master/utils/src/main/java/com/haoge/easyandroid/easy/EasyLog.kt)
> 用于简单的进行日志打印输出,支持格式化输出、自定义打印格式。
- 不阻塞:打印任务运行于独立线程中,避免大量打印数据时造成UI阻塞。
- 安全: 对打印任务做好了异常处理。不用担心出现crash问题
- 使用EasyFormatter对任意数据进行格式化排版
- 支持添加自定义规则
- 灵活、直观的进行输出样式定制
- 自动适配TAG. 也可手动指定。
- 使用开关。关闭线上包的日志输出。
- 使用'上边界'逻辑进行栈帧匹配,支持二次封装使用
用法示例:
```
val any:Any = create()// 创建待打印数据
EasyLog.DEFAULT.d(any)// 使用默认log实例进行数据打印. 以Log.d()的方式进行输出
```
### [EasyToast](./docs/EasyToast.md)
> [点我查看完整使用文档](./docs/EasyToast.md)
> [点击下载组件源码文件进行使用](https://raw.githubusercontent.com/yjfnypeu/EasyAndroid/master/utils/src/main/java/com/haoge/easyandroid/easy/EasyToast.kt)
> 用于进行Toast提示,可很简单的指定输出样式。
1. 支持在任意线程下进行toast提示
2. 非常方便的进行任意样式的定制
3. 不管当前是否正在展示之前的数据。有新消息通知时,直接展示新消息,无需等待
博客地址:https://juejin.im/post/5b0638336fb9a07aa9261ce6
用法示例:
```
val message:String = create()// 创建待提示数据
EasyToast.DEFAULT.show(message)// 使用系统样式进行输出
EasyToast.create(layoutID:Int, tvID:Int, duration:Int).show(message)// 使用自定义样式进行输出
```
### [EasyReflect](./docs/EasyReflect.md)
> [点我查看完整使用文档](./docs/EasyReflect.md)
> [点击下载组件源码文件进行使用](https://raw.githubusercontent.com/yjfnypeu/EasyAndroid/master/utils/src/main/java/com/haoge/easyandroid/easy/EasyReflect.kt)
> 对常规的反射操作进行封装。达到更便于使用反射的效果
博客地址:https://juejin.im/post/5b1de20c6fb9a01e701000cb
用法示例:
```
// 以类名Test为例
class Test private constructor(private val name:String) {
private fun wrap(name:String):String = "包裹后的数据$name"
}
// 创建Reflect实例:
var reflect = EasyReflect.create(Test::class.java).instance("默认参数")
// 为name字段赋值:
reflect.setField("name", "EasyReflect")
// 读取name字段的值:"EasyReflect"
val value = reflect.getValue("name")
// 调用方法wrap方法,并传入参数value
reflect.call("wrap", value)
// 调用wrap方法,并获取返回值: "包裹后的数据EasyReflect"
val result = reflect.callWithReturn("wrap", value).get
或者手动加入QQ群: 108895031
## License
[apache license 2.0](http://choosealicense.com/licenses/apache/)