Android KTX
Android KTX 是 Android Jetpack 里一个 Kotlin 的扩展库。它优化了 Kotlin 对 Jetpack 和 Android 原生 API 的调用,借助 Kotlin 语言中扩展函数/属性、lambda 表达式、命名参数、默认参数等一系列的功能,使 Kotlin 在 Android 的开发过程中变得更加简洁、愉快和自然。Android KTX 没有在已有的 Android API 的基础上增加任何新的功能。
你可以在 DevBytes 的系列视频中了解更多关于 Android KTX 的知识。
使用Android KTX
首先,在build.gradle
中添加依赖:
repositories {
google()
}
Android KTX是模块化结构的。每个模块包含着一个或多个包。
要使用一个模块,首先在你的 build.gradle
文件中添加模块对应的 artifact。记得要在 artifact 后面加上版本号。比如,如果你想用 core-ktx 模块的话,完整的依赖应该是这个样子的:
dependencies {
implementation 'androidx.core:core-ktx:1.0.0-alpha1'
}
模块
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 模块包含以下这些包:
- androidx.core.animation
- androidx.core.content
- androidx.core.graphics
- androidx.core.graphics.drawable
- androidx.core.net
- androidx.core.os
- androidx.core.preference
- androidx.core.text
- androidx.core.transition
- androidx.core.util
- androidx.core.view
- androidx.core.widget
示例
以下的示例展示了一些 Android KTX 的扩展函数。示例是按照模块(artifact)来分组的。如果想要查看完整的扩展函数列表,请参阅模块的文档。
androidx.core:core-ktx
Kotlin:
sharedPreferences.edit()
.putBoolean("key", value)
.apply()
Kotlin + Android KTX:
sharedPreferences.edit {
putBoolean("key", value)
}
Kotlin:
view.viewTreeObserver.addOnPreDrawListener(
object : ViewTreeObserver.OnPreDrawListener {
override fun onPreDraw(): Boolean {
viewTreeObserver.removeOnPreDrawListener(this)
actionToBeTriggered()
return true
}
}
)
Kotlin + Android KTX:
view.doOnPreDraw {
actionToBeTriggered()
}
androidx.sqlite:sqlite-ktx
Kotlin:
db.beginTransaction()
try {
// insert data
db.setTransactionSuccessful()
} finally {
db.endTransaction()
}
Kotlin + Android KTX:
db.transaction {
// insert data
}
androidx.fragment:fragment-ktx
Kotlin:
supportFragmentManager
.beginTransaction()
.replace(R.id.my_fragment_container, myFragment, FRAGMENT_TAG)
.commitAllowingStateLoss()
Kotlin + Android KTX:
supportFragmentManager.transaction(allowStateLoss = true) {
replace(R.id.my_fragment_container, myFragment, FRAGMENT_TAG)
}
反馈
Android KTX 现在还处于 Alpha 阶段。我们会在 Jetpack 中持续添加新的 Kotlin 扩展函数。如果你想要报告问题或提出新功能的要求,请在 Android KTX 的问题追踪表里提交新的问题