【Kotlin For Android】(三): Anko 庫

1、簡介

Github地址
Anko 是一個使 Android應用程序 開發更快,更容易的庫。它使你的代碼變得簡潔易讀,並讓您忘記 Android SDK for Java 的粗糙邊緣。git

Anko 由幾部分組成:github

  • Anko Commons:一個輕量級的庫,裏面充滿了intents,對話框,日誌等幫助器;
  • Anko Layouts:用於編寫動態Android佈局 的快速且類型安全的方法;
  • Anko SQLite:查詢適用於 Android SQLite的 DS L和分析器集合;
  • Anko Coroutines:基於 kotlinx.coroutines 庫的實用程序。

1.一、Anko Commons

Anko CommonsKotlin Android 開發人員的「工具箱」。該庫包含不少Android SDK助手,包括但不限於:sql

  • Intents (wiki);
  • Dialogs and toasts (wiki);
  • Logging (wiki);
  • Resources and dimensions (wiki).

1.二、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 擁有一個用於 ConstraintLayoutDSLapp

還有一個Android Studio 插件,支持預覽 Anko DSL佈局。框架

注意:這是一個完整佈局的代碼。不須要 XML異步

1.三、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.四、Anko Coroutines (wiki)

Anko Coroutines 基於 kotlinx.coroutines 的庫,並提供:

  • bg() :函數在公共池中執行您的代碼。
  • asReference() : 函數建立一個弱引用包裝。默認狀況下,協程持有對捕獲對象的引用,直到完成或取消爲止。若是您的異步框架不支持取消,則在異步塊內使用的值可能會泄漏。asReference()保護你免受此影響。

2、 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.

相關文章
相關標籤/搜索