一、简介
Github地址Anko
是一个使 Android应用程序 开发更快,更容易的库。它使你的代码变得简洁易读,并让您忘记 Android SDK for Java
的粗糙边缘。
Anko 由几部分组成:
Anko Commons
:一个轻量级的库,里面充满了intents
,对话框,日志等帮助器;Anko Layouts
:用于编写动态Android布局 的快速且类型安全的方法;- Anko SQLite:查询适用于 Android SQLite的 DS L和分析器集合;
- Anko Coroutines:基于 kotlinx.coroutines 库的实用程序。
1.1、Anko Commons
Anko Commons
是 Kotlin Android
开发人员的“工具箱”。该库包含很多Android SDK助手
,包括但不限于:
1.2、Anko Layouts (wiki)
_Anko Layouts_是用于编写动态Android布局的DSL。这是一个用Anko DSL编写的简单用户界面:
verticalLayout {
val name = editText()
button("Say Hello") {
onClick { toast("Hello, ${name.text}!") }
}
}
上面的代码在 LinearLayout 中创建了一个按钮,这个按钮添加了OnClickListene。而且,onClick接受一个suspend lambda
,所以你可以在监听器里写你的异步代码!
自v0.10.4以来,Anko 拥有一个用于 ConstraintLayout
的 DSL
。
还有一个Android Studio 插件,支持预览 Anko DSL布局。
注意:这是一个完整布局的代码。不需要 XML
1.3、Anko SQLite (wiki)
你是否厌倦过使用Android游标解析SQLite查询结果?Anko SQLite提供了许多帮助程序来简化SQLite数据库的工作。
例如,以下是如何获取具有特定名称的用户列表:
fun getUsers(db: ManagedSQLiteOpenHelper): List<User> = db.use {
db.select("Users")
.whereSimple("family_name = ?", "John")
.doExec()
.parseList(UserParser)
}
1.4、Anko Coroutines (wiki)
Anko Coroutines
基于 kotlinx.coroutines 的库,并提供:
- bg() :函数在公共池中执行您的代码。
- asReference() : 函数创建一个弱引用包装。默认情况下,协程持有对捕获对象的引用,直到完成或取消为止。如果您的异步框架不支持取消,则在异步块内使用的值可能会泄漏。asReference()保护你免受此影响。
二、 Anko 使用
Anko有一个元依赖关系,它可以一次性将所有可用功能(包括Commons,Layouts,SQLite)插入到您的项目中:
dependencies {
implementation "org.jetbrains.anko:anko:$anko_version"
}
确保你已经在项目级别的Gradle文件中设置 $anko_version:
ext.anko_version='0.10.4'
如果你只需要一些功能,你可以参考Anko的部分:
dependencies {
// Anko Commons
implementation "org.jetbrains.anko:anko-commons:$anko_version"
// Anko Layouts
implementation "org.jetbrains.anko:anko-sdk25:$anko_version" // sdk15, sdk19, sdk21, sdk23 are also available
implementation "org.jetbrains.anko:anko-appcompat-v7:$anko_version"
// Coroutine listeners for Anko Layouts
implementation "org.jetbrains.anko:anko-sdk25-coroutines:$anko_version"
implementation "org.jetbrains.anko:anko-appcompat-v7-coroutines:$anko_version"
// Anko SQLite
implementation "org.jetbrains.anko:anko-sqlite:$anko_version"
}
Android支持库还有一些工件:
dependencies {
// Appcompat-v7 (only Anko Commons)
implementation "org.jetbrains.anko:anko-appcompat-v7-commons:$anko_version"
// Appcompat-v7 (Anko Layouts)
implementation "org.jetbrains.anko:anko-appcompat-v7:$anko_version"
implementation "org.jetbrains.anko:anko-coroutines:$anko_version"
// CardView-v7
implementation "org.jetbrains.anko:anko-cardview-v7:$anko_version"
// Design
implementation "org.jetbrains.anko:anko-design:$anko_version"
implementation "org.jetbrains.anko:anko-design-coroutines:$anko_version"
// GridLayout-v7
implementation "org.jetbrains.anko:anko-gridlayout-v7:$anko_version"
// Percent
implementation "org.jetbrains.anko:anko-percent:$anko_version"
// RecyclerView-v7
implementation "org.jetbrains.anko:anko-recyclerview-v7:$anko_version"
implementation "org.jetbrains.anko:anko-recyclerview-v7-coroutines:$anko_version"
// Support-v4 (only Anko Commons)
implementation "org.jetbrains.anko:anko-support-v4-commons:$anko_version"
// Support-v4 (Anko Layouts)
implementation "org.jetbrains.anko:anko-support-v4:$anko_version"
// ConstraintLayout
implementation "org.jetbrains.anko:anko-constraint-layout:$anko_version"
}
There is an example project showing how to include Anko library into your Android Gradle project.