Anko 是 JetBrains 针对 Kotlin 推出的 Android 开发库,其目的是通过 Kotlin 让 Android 开发更加简单。
Anko 主要有四个模块:
- Commons
- Layouts
- SQLite
- Coroutines
在这篇文章中,我们先主要介绍其 Commons 模块中的一些内容:
首先,View.setOnClickListener 方法可以说是广大 Android 开发者写得最多的方法之一了,如果你是用 Kotlin,那么代码看起来应该是类似这样的:
button.setOnClickListener(object : View.OnClickListener{
override fun onClick(v: View) {
}
})
通过使用 Anko 可以把代码缩减为:
button.onClick { }
Intent
当我们希望跳转到新的 Activity 时,代码类似这样:
val intent = Intent(this, MainActivity::class.java)
intent.putExtra("id", 5)
intent.putExtra("name", "John")
startActivity(intent)
而通过 Anko:
startActivity<mainactivity>("id" to 5, "name" to "John")
Anko 还封装了一些常用的功能,让我们无需定义 Intent:
browse("https://makery.co")
share("share", "subject")
email("[email protected]", "Great app idea", "potato")
尺寸的单位问题
通过 Anko,Android 中的尺寸单位换算也变得无比简单:
val dpAsPx = dip(10f)
sp(15f)
API level 的问题
碎片化是 Android 开发者必须要面对的问题,我们不希望不管那些还在用旧版本的用户,但也希望能使用新 Android 版本中酷炫的功能。最常见的做法是像这样:
if (Build.VERSION.SDK_INT == Build.VERSION_CODES.LOLLIPOP){ }
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.LOLLIPOP){ }
现在让我们看看 Anko 是怎么做的:
doIfSdk(Build.VERSION_CODES.LOLLIPOP){ }
doFromSdk(Build.VERSION_CODES.LOLLIPOP){ }
真是简单又易懂。
处理线程
处理多线程一直都不太容易,但在 Android 开发中我们经常需要面对。在 Anko 中的做法会相当的简洁:
doAsync {
//IO task or other computation with high cpu load
uiThread {
toast("async computation finished")
}
}
集成 Anko
如果你也心动了,想尝试一下,可以通过下面的方式来集成 Anko:
ankoVersion = "0.10.1"
dependencies {
compile "org.jetbrains.anko:anko-appcompat-v7-listeners:$ankoVersion"
compile "org.jetbrains.anko:anko-design-listeners:$ankoVersion"
compile "org.jetbrains.anko:anko-design:$ankoVersion"
compile "org.jetbrains.anko:anko-sdk15-listeners:$ankoVersion"
compile "org.jetbrains.anko:anko-sdk15:$ankoVersion"
}