簡(jiǎn)評(píng):原作者是 Basecamp 的一位 Android 工程師,而 Basecamp 的 Android App 已經(jīng) 100% 的使用 Kotlin 來開發(fā)了攒至,相信他們的建議應(yīng)該是非常有用的常侣。
Extension functions 是 Kotlin 的一個(gè)重要特性,讓你無需繼承一個(gè)類就拓展其功能。在 Basecamp但两,他們就利用了這一特性來簡(jiǎn)化了某些常用的 Android API。
下面就給一些示例:
設(shè)置 view 的高度
在 Android 的編程過程中通過代碼來設(shè)置 view 的高度是很煩人的供置。但在 Kotlin 中谨湘,你可以添加這樣一個(gè)方法:
fun View.setHeight(height: Int) {
val params = layoutParams
params.height = height
layoutParams = params
}
現(xiàn)在,如果你再要設(shè)置 view 高度的話,只需要調(diào)用 view.setHeight(newHeight) 就可以啦紧阔。
設(shè)置 view 是否可見
每次都通過寫 view.visibility = View.VISIBLE 或 view.visibility = View.GONE 來控制視圖是否可見實(shí)在是有點(diǎn)乏味坊罢。我們像下面這樣來擴(kuò)展一下:
fun View.visible() {
visibility = View.VISIBLE
}
fun View.gone() {
visibility = View.GONE
}
現(xiàn)在我們就能直接調(diào)用 view.visible() 和 view.gone() 來完成相同的事啦。
Inflate a layout
fun Context.inflate(res: Int, parent: ViewGroup? = null) : View {
return LayoutInflater.from(this).inflate(res, parent, false)
}
使用 Anko Library
JetBrains 已經(jīng)做了大量工作來簡(jiǎn)化 Android 開發(fā)擅耽,他們?cè)?Anko library 中加入了大量的 extension function活孩,讓 Android 開發(fā)者可以直接調(diào)用。
也可以作為 Kotlin extension function 的學(xué)習(xí)示例乖仇,看下最專業(yè)的 Kotlin 代碼是怎么寫的憾儒。
比如,通過 Anko 來獲取系統(tǒng)服務(wù)非常的簡(jiǎn)單:
val manager = context.notificationManager
當(dāng)然乃沙,這不是 extension function 而是 *extension property - *另一個(gè) Kotlin 中非常有用的特性起趾。其內(nèi)部實(shí)現(xiàn)是這樣的:
val Context.notificationManager: NotificationManager
get() = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
Android 有大量豐富且強(qiáng)大的的 API,但受制于 Java 的某些設(shè)計(jì)缺陷警儒。在 Kotlin 中開發(fā)者能夠通過 extension function 來重新設(shè)計(jì)優(yōu)化這些最常用的 API训裆。在 Basecamp 的開發(fā)中我們已經(jīng)嘗到了這樣做是多么的方便,也絕對(duì)值得你一試蜀铲。
延伸閱讀:
- 讓你的 Kotlin 代碼遠(yuǎn)離 !! - 知乎專欄
- 極光開源項(xiàng)目:「Aurora UI」缭保,一個(gè)通用 IM 聊天 UI 組件,支持Android蝙茶、iOS(swift/oc)艺骂、react。