Anko
Anko 是一个 Kotlin 库致力于使Android开发更加的方便快捷。 它使你的代码简洁、易读, 让你忘记基于Java的Android SDK的那种粗糙感。
Anko 主要包括以下几个方面
Anko Commons: 一个轻量级的库,完全提供 intents, dialogs, logging 等等的帮助类;
Anko Layouts: 提供一种快捷并类型安全的方式书写Android动态布局;
Anko SQLite: 一个包含 query DSL and parser 集合,用于 Android SQLite;
Anko Coroutines: 基于 kotlinx.coroutines 的工具库.。
Anko Commons
Anko Commons 是一个提供给Kotlin Android开发者的 "工具盒子"。 这个库包含了大量的 Android SDK 的帮助类, 包括,但不仅仅限于以下这些:
Intents (wiki);
Dialogs and toasts (wiki);
Logging (wiki);
Resources and dimensions (wiki).
Anko Layouts (wiki)
Anko Layouts 是一个专门编写Android动态布局的DSL。 这是一个使用 Anko DSL 写的UI小例子:
verticalLayout {
val name = editText()
button("Say Hello") {
onClick { toast("Hello, ${name.text}!") }
}
}
这段代码在 LinearLayout 种创建了一个按钮,并在按钮上附加了 OnClickListener 。 此外, onClick 支持一种 挂起式的lambda表达式,所以,你可以在监听器中编写异步代码。
注意:这是完整的布局代码,不需要XML!
这有个 插件 让 Android Studio 支持预览 Anko DSL 布局。
Anko SQLite (wiki)
你是否尝试过使用Android cursor解析SQLite的查询结果?Anko SQLite 提供了大量的帮助类,使得对SQLite数据库的操作更加的简单。
下面这个例子是根据姓名获取用户的列表:
fun getUsers(db: ManagedSQLiteOpenHelper): List<User> = db.use {
db.select("Users")
.whereSimple("family_name = ?", "John")
.doExec()
.parseList(UserParser)
}
Anko Coroutines (wiki)
Anko Coroutines 基于 kotlinx.coroutines 库,并提供:
bg() 函数,是你的代码在一个公共池中执行。
asReference() 函数,创建了一种弱引用封装。 默认情况下, 一个协同程序维护着被捕获对象的引用直到它结束或是被关闭。 如果你的异步框架不支持 cancellation,你在异步块中使用的值可能会被遗漏。 asReference() 可以预防这种情况的发生。
使用 Anko
基于Gradle的工程
Anko 有一个元依赖一次性将所有的特性 (including Commons, Layouts, SQLite) 添加到你的工程中去:
dependencies {
compile "org.jetbrains.anko:anko:$anko_version"
}
如果你只需要其中的一部分特性, 你可以引用 Anko's 的任何一部分:
dependencies {
// Anko Commons
compile "org.jetbrains.anko:anko-commons:$anko_version"
// Anko Layouts
compile "org.jetbrains.anko:anko-sdk25:$anko_version" // sdk15, sdk19, sdk21, sdk23 are also available
compile "org.jetbrains.anko:anko-appcompat-v7:$anko_version"
// Coroutine listeners for Anko Layouts
compile "org.jetbrains.anko:anko-sdk25-coroutines:$anko_version"
compile "org.jetbrains.anko:anko-appcompat-v7-coroutines:$anko_version"
// Anko SQLite
compile "org.jetbrains.anko:anko-sqlite:$anko_version"
}
这里还有大量为Android支持库提供的 artifacts :
dependencies {
// Appcompat-v7 (only Anko Commons)
compile "org.jetbrains.anko:anko-appcompat-v7-commons:$anko_version"
// Appcompat-v7 (Anko Layouts)
compile "org.jetbrains.anko:anko-appcompat-v7:$anko_version"
compile "org.jetbrains.anko:anko-coroutines:$anko_version"
// CardView-v7
compile "org.jetbrains.anko:anko-cardview-v7:$anko_version"
// Design
compile "org.jetbrains.anko:anko-design:$anko_version"
compile "org.jetbrains.anko:anko-design-coroutines:$anko_version"
// GridLayout-v7
compile "org.jetbrains.anko:anko-gridlayout-v7:$anko_version"
// Percent
compile "org.jetbrains.anko:anko-percent:$anko_version"
// RecyclerView-v7
compile "org.jetbrains.anko:anko-recyclerview-v7:$anko_version"
compile "org.jetbrains.anko:anko-recyclerview-v7-coroutines:$anko_version"
// Support-v4 (only Anko Commons)
compile "org.jetbrains.anko:anko-support-v4-commons:$anko_version"
// Support-v4 (Anko Layouts)
compile "org.jetbrains.anko:anko-support-v4:$anko_version"
}