Kotlin 讓使用 Android API 變得輕鬆

簡評:原作者是 Basecamp 的一位 Android 工程師,而 Basecamp 的 Android App 已經 100% 的使用 Kotlin 來開發了,相信他們的建議應該是非常有用的。

Extension functions 是 Kotlin 的一個重要特性,讓你無需繼承一個類就拓展其功能。在 Basecamp,他們就利用了這一特性來簡化了某些常用的 Android API。

下面就給一些示例:

設置 view 的高度

在 Android 的編程過程中通過代碼來設置 view 的高度是很煩人的。但在 Kotlin 中,你可以添加這樣一個方法:

fun View.setHeight(height: Int) {n val params = layoutParamsn params.height = heightn layoutParams = paramsn}n

現在,如果你再要設置 view 高度的話,只需要調用 view.setHeight(newHeight) 就可以啦。

設置 view 是否可見

每次都通過寫 view.visibility = View.VISIBLE 或 view.visibility = View.GONE 來控制視圖是否可見實在是有點乏味。我們像下面這樣來擴展一下:

fun View.visible() {n visibility = View.VISIBLEn}nfun View.gone() {n visibility = View.GONEn}n

現在我們就能直接調用 view.visible() 和 view.gone() 來完成相同的事啦。

Inflate a layout

fun Context.inflate(res: Int, parent: ViewGroup? = null) : View {n return LayoutInflater.from(this).inflate(res, parent, false)n}n

使用 Anko Library

JetBrains 已經做了大量工作來簡化 Android 開發,他們在 Anko library 中加入了大量的 extension function,讓 Android 開發者可以直接調用。

也可以作為 Kotlin extension function 的學習示例,看下最專業的 Kotlin 代碼是怎麼寫的。

比如,通過 Anko 來獲取系統服務非常的簡單:

val manager = context.notificationManagern

當然,這不是 extension function 而是 extension property - 另一個 Kotlin 中非常有用的特性。其內部實現是這樣的:

val Context.notificationManager: NotificationManagern get() = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManagern

Android 有大量豐富且強大的的 API,但受制於 Java 的某些設計缺陷。在 Kotlin 中開發者能夠通過 extension function 來重新設計優化這些最常用的 API。在 Basecamp 的開發中我們已經嘗到了這樣做是多麼的方便,也絕對值得你一試。

原文:Using Kotlin to make Android APIs fun again

日報擴展閱讀:

讓你的 Kotlin 代碼遠離 !! - 知乎專欄

歡迎關註:知乎專欄「極光日報」,每天為 Makers 導讀三篇優質英文文章。

推薦閱讀:

編程雜談(一) - 英文是很重要的
#Kotlin# 小心 Rx 的生命周期
Kotlin 泛型中的 in 和 out

TAG:Kotlin | Android开发 | Android |