功能强大的Android开发库:Anko

时间:2022-06-19 19:47:20

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}!") }

}

}

功能强大的Android开发库:Anko

这段代码在 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"

}