當 Kotlin 遇上 Android KTX,豈止絲滑?

亦楓發表於2019-03-03

Kotlin 語言自從得到 Google 的官方認定之後,在 Android 開發這條路上的發展可謂是一馬平川。不僅是 Android Studio 3.0 開始預設自動支援 Kotlin 語言,還有一件更為驚喜的事。

Google 於上週正式對外發布 Android KTX 預覽版。

Android KTX 是什麼呢?簡單來說,它就是類似於我們開發中常用的 Support Library 這種支援類庫,提供一些非常人性化的 APIs 來幫助使用開發人員更簡潔、更符合程式設計習慣地編寫 Kotlin 程式碼。

接下來舉幾個例子,來見證一下使用 Android KTX 框架前後,我們的 Kotlin 程式碼究竟變化多少,是不是更加簡潔、自然一些。

String to Uri

使用 Kotlin 將一個 String 物件轉化成 Uri 物件是這麼寫的:

val uri = Uri.parse(myUriString)
複製程式碼

Android KTX 框架在 String 的基礎上進行擴充套件,增加更多的方法,所以上面這行程式碼便能這麼寫:

val uri = myUriString.toUri()
複製程式碼

這樣的話,你不必再單獨引入 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 動作

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'
    ...
}
複製程式碼

開發時,IDE 會自動根據你的程式碼智慧提示,自動補全相關程式碼。

還有一點值得一提的是,Android KTX 使用一個全新的 包名字首:androidx。Google 希望將來提供 Android Support Library 包時,開發人員能夠明顯地區分出 *android. **與 *androidx. **這兩種 API 的使用。這是一個體貼入微的設計細節,Google 想得非常周到。

Android KTX 的原始碼已經放在 GitHub 倉庫中,目前還在完善改進當中:

github.com/android/and…

關於我:亦楓,部落格地址:yifeng.studio/,新浪微博:IT亦楓

微信掃描二維碼,歡迎關注我的個人公眾號:安卓筆記俠

不僅分享我的原創技術文章,還有程式設計師的職場遐想

當 Kotlin 遇上 Android KTX,豈止絲滑?

相關文章