Kotlin 語言自從得到 Google 的官方認(rèn)定之后婚陪,在 Android 開發(fā)這條路上的發(fā)展可謂是一馬平川族沃。不僅是 Android Studio 3.0 開始默認(rèn)自動(dòng)支持 Kotlin 語言,還有一件更為驚喜的事泌参。
Google 于上周正式對(duì)外發(fā)布 Android KTX 預(yù)覽版脆淹。
Android KTX 是什么呢?簡單來說沽一,它就是類似于我們開發(fā)中常用的 Support Library 這種支持類庫盖溺,提供一些非常人性化的 APIs 來幫助使用開發(fā)人員更簡潔、更符合編程習(xí)慣地編寫 Kotlin 代碼铣缠。
接下來舉幾個(gè)例子烘嘱,來見證一下使用 Android KTX 框架前后,我們的 Kotlin 代碼究竟變化多少蝗蛙,是不是更加簡潔蝇庭、自然一些。
String to Uri
使用 Kotlin 將一個(gè) String 對(duì)象轉(zhuǎn)化成 Uri 對(duì)象是這么寫的:
val uri = Uri.parse(myUriString)
Android KTX 框架在 String 的基礎(chǔ)上進(jìn)行擴(kuò)展捡硅,增加更多的方法哮内,所以上面這行代碼便能這么寫:
val uri = myUriString.toUri()
這樣的話,你不必再單獨(dú)引入 Uri 類壮韭,寫起來是不是有一種行云流水北发、一氣呵成的感覺?
SharedPreferences
Kotlin:
sharedPreferences.edit()
.putBoolean(key, value)
.apply()
Kotlin with Android KTX:
sharedPreferences.edit {
putBoolean(key, value)
}
canvas path 操作
Kotlin:
val pathDifference = Path(myPath1).apply {
op(myPath2, Path.Op.DIFFERENCE)
}
val myPaint = Paint()
canvas.apply {
val checkpoint = save()
translate(0F, 100F)
drawPath(pathDifference, myPaint)
restoreToCount(checkpoint)
}
Kotlin with Android KTX:
val pathDifference = myPath1 - myPath2
canvas.withTranslation(y = 100F) {
drawPath(pathDifference, myPaint)
}
View onPreDraw 動(dòng)作
Kotlin:
view.viewTreeObserver.addOnPreDrawListener(
object : ViewTreeObserver.OnPreDrawListener {
override fun onPreDraw(): Boolean {
viewTreeObserver.removeOnPreDrawListener(this)
actionToBeTriggered()
return true
}
})
Kotlin with Android KT:
view.doOnPreDraw { actionToBeTriggered() }
諸如此類的例子還有很多喷屋×詹Γ可以看出,使用 Android KTX 極大地簡化我們的 Kotlin 代碼屯曹。
只要你在 app/build.gradle 文件中引入 Android KTX 的依賴配置:
repositories {
google()
}
dependencies {
// Android KTX for framework API
implementation 'androidx.core:core-ktx:0.1'
...
}
開發(fā)時(shí)狱庇,IDE 會(huì)自動(dòng)根據(jù)你的代碼智能提示寄疏,自動(dòng)補(bǔ)全相關(guān)代碼。
還有一點(diǎn)值得一提的是僵井,Android KTX 使用一個(gè)全新的 包名前綴:androidx陕截。Google 希望將來提供 Android Support Library 包時(shí),開發(fā)人員能夠明顯地區(qū)分出 *android. **與 *androidx. **這兩種 API 的使用批什。這是一個(gè)體貼入微的設(shè)計(jì)細(xì)節(jié)农曲,Google 想得非常周到。
Android KTX 的源碼已經(jīng)放在 GitHub 倉庫中驻债,目前還在完善改進(jìn)當(dāng)中: