Android KTX

原文链接:Android KTX | Android Developers

Android KTX 是 Android Jetpack 里一个 Kotlin 的扩展库。它优化了 Kotlin 对 Jetpack 和 Android 原生 API 的调用,借助 Kotlin 语言中扩展函数/属性、lambda 表达式、命名参数、默认参数等一系列的功能,使 Kotlin 在 Android 的开发过程中变得更加简洁、愉快和自然。Android KTX 没有在已有的 Android API 的基础上增加任何新的功能。

你可以在 DevBytes 的系列视频中了解更多关于 Android KTX 的知识。

使用Android KTX

首先,在build.gradle中添加依赖:

  1. repositories {
  2. google()
  3. }

Android KTX是模块化结构的。每个模块包含着一个或多个包。

要使用一个模块,首先在你的 build.gradle 文件中添加模块对应的 artifact。记得要在 artifact 后面加上版本号。比如,如果你想用 core-ktx 模块的话,完整的依赖应该是这个样子的:

  1. dependencies {
  2. implementation 'androidx.core:core-ktx:1.0.0-alpha1'
  3. }

模块

Android KTX 是由以下这些 Maven artifact 组成的。点击包名,可以在扩展函数的概述中看到其包含的 API 的文档。

模块 (artifact) 版本
androidx.core:core-ktx 1.0.0-alpha1 详见下面的core模块包列表
androidx.fragment:fragment-ktx 1.0.0-alpha1 androidx.fragment.graphics
androidx.palette:palette-ktx 1.0.0-alpha1 androidx.palette.graphics
androidx.sqlite:sqlite-ktx 1.0.0-alpha1 androidx.sqlite.db
androidx.collection:collection-ktx 1.0.0-alpha1 androidx.collection
androidx.lifecycle:lifecycle-viewmodel-ktx 2.0.0-alpha1 androidx.lifecycle
androidx.lifecycle:lifecycle-reactivestreams-ktx 2.0.0-alpha1 androidx.lifecycle
android.arch.navigation:navigation-common-ktx 1.0.0-alpha01 androidx.navigation
android.arch.navigation:navigation-fragment-ktx 1.0.0-alpha01 androidx.navigation.fragment
android.arch.navigation:navigation-runtime-ktx 1.0.0-alpha01 androidx.navigation
android.arch.navigation:navigation-testing-ktx 1.0.0-alpha01 androidx.navigation.testing
android.arch.navigation:navigation-ui-ktx 1.0.0-alpha01 androidx.navigation.ui
android.arch.work:work-runtime-ktx 1.0.0-alpha01 androidx.work.ktx

Core 模块包含以下这些包:

示例

以下的示例展示了一些 Android KTX 的扩展函数。示例是按照模块(artifact)来分组的。如果想要查看完整的扩展函数列表,请参阅模块的文档。

androidx.core:core-ktx

Kotlin:

  1. sharedPreferences.edit()
  2. .putBoolean("key", value)
  3. .apply()

Kotlin + Android KTX:

  1. sharedPreferences.edit {
  2. putBoolean("key", value)
  3. }

Kotlin:

  1. view.viewTreeObserver.addOnPreDrawListener(
  2. object : ViewTreeObserver.OnPreDrawListener {
  3. override fun onPreDraw(): Boolean {
  4. viewTreeObserver.removeOnPreDrawListener(this)
  5. actionToBeTriggered()
  6. return true
  7. }
  8. }
  9. )

Kotlin + Android KTX:

  1. view.doOnPreDraw {
  2. actionToBeTriggered()
  3. }

androidx.sqlite:sqlite-ktx

Kotlin:

  1. db.beginTransaction()
  2. try {
  3. // insert data
  4. db.setTransactionSuccessful()
  5. } finally {
  6. db.endTransaction()
  7. }

Kotlin + Android KTX:

  1. db.transaction {
  2. // insert data
  3. }

androidx.fragment:fragment-ktx

Kotlin:

  1. supportFragmentManager
  2. .beginTransaction()
  3. .replace(R.id.my_fragment_container, myFragment, FRAGMENT_TAG)
  4. .commitAllowingStateLoss()

Kotlin + Android KTX:

  1. supportFragmentManager.transaction(allowStateLoss = true) {
  2. replace(R.id.my_fragment_container, myFragment, FRAGMENT_TAG)
  3. }

反馈

Android KTX 现在还处于 Alpha 阶段。我们会在 Jetpack 中持续添加新的 Kotlin 扩展函数。如果你想要报告问题或提出新功能的要求,请在 Android KTX 的问题追踪表里提交新的问题