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