好用到爆的Kotlin扩展库AndroidKTX,如果你也用Kotlin开发Android,You Need It !

2,673 阅读3分钟

写在前面

首先,这是一个Kotlin类库,如果你的项目是JAVA写的,那就暂时帮不上你的忙了。 其次,这个可不是官方那个android-ktx

随着项目越来越多,我们必然抽取大量的工具类和公共模块。Java的工具类看起来已经很简单了,但是Kotlin的扩展又让其简洁性和易用性上了一个等级,而且还有点AOP的功能。这里我不再多说Kotlin的好处了,我是一个Kotlin的爱好者和推广者,我们公司的后台,安卓和前端核心代码全线切为Kotlin了,开发效率大大提升;如果你想快乐的写代码,那就用Kotlin吧!

快速尝鲜

这个类库对常用的使用场景进行了封装,包括Http,目标是替代你项目中的所有工具类。来看看几个例子吧:

  1. View点击
view.click {
    toast("do something")
}

除了写法简洁一点,它内部还实现了事件的节流。限制用户在350ms内只能点击一次,相信你遇到过用户快速点击按钮开启多个Activity的场景。

  1. 字符串的哈希
"123456".md5()
"123456".sha1()
"123456".sha1Hmac(salt) // 随机数增强的哈希
//...

项目中经常遇到对字符串进行hash,类库提供了常见的md5, sha1, sha256, 随机数增加哈希,AES,DES等算法的封装。

  1. 打印日志
"我是测试".v()
"我是测试".i()
"我是测试".w()
"我是测试".d()
"我是测试".e()

日志的tag和开关都是可配置的。

  1. Span相关
val str = "我是测试文字"
tvSizeResult.sizeSpan(str, 0..2)
tvSizeResult.sizeSpan(str, 0..2, scale = .7f) //改变scale可以控制放大或缩小,scale默认是1.5

tvColorResult.colorSpan(str,2..6)

tvStrikethrougthResult.strikeThrougthSpan(str,2..6)

封装了颜色,大小,背景色,删除线和点击等常用的文本装饰,使用对象是TextView和String。

  1. ImageView相关

主要是加载图片的封装:

// 底层是封装Glide来加载图片
imageView.load(url)
imageView.load(url, placeholder = R.mipmap.ic_launcher, isCircle = true)
imageView.load(url, placeholder = R.mipmap.ic_launcher, roundRadius = 20)
  1. OkHttp相关

对OkHttpUtils和OkGo都不满意,于是造了一个。 请求:

//Get请求
val user = "http://192.168.1.103:3000/json".http().get<User>()
//Post请求,传递header和params
val user = "http://192.168.1.103:3000/json".http()
                .headers("device" to "HuaWeiMate20", ...)
                .params("token" to "188sas9cf99a9d",
                    "file" to file,  //上传文件
                     ...)
                .post<User>()

上面的示例本身需要在协程中使用;也是我最喜欢和最推荐的方式。如果你不用协程,则可以用callback style

"http://192.168.1.103:3000/json".http().get(object : HttpCallback<String> {
        override fun onSuccess(t: String) {
        }
        override fun onFail(e: IOException) {
            super.onFail(e)
        }
    })

内置了简洁实用的日志打印器:

其他设置:

// 设置自定义的Client
OkWrapper.setClient(...)
// 设置全局header
OkWrapper.headers("header1" to "a", "header2" to "b", ...)
// 设置拦截器
OkWrapper.interceptors(...)
// 取消请求
"http://192.168.1.103:3000/json".http(tag = "abc").get<String>() //需要先指定tag
OkWrapper.cancel("abc")

最后

上面的只是类库中很小的一部分,更多的使用详情请看Github的README吧,希望能帮助到你。

Github地址:github.com/li-xiaojun/…

欢迎您在Issue中提出一些建议和意见,来共同完善这个库。如果您喜欢它,也可以给个Star。