最喜歡Kotlin中的功能之一就是擴(kuò)展功能,它允許你擴(kuò)展類(lèi)中的功能而不用繼承它們。
設(shè)置View的高度
在A(yíng)ndroid中動(dòng)態(tài)的給View設(shè)置高度是很煩人的,使用Kotlin擴(kuò)展,讓你變得更輕松:
fun View.setHeight(height:Int){
val params = layoutParams
params.height = height
layoutParams = params
}
如果你想設(shè)置height到你的view實(shí)例中白热,你只需要調(diào)用view.setHeight(newHeight)
,超級(jí)簡(jiǎn)單!
設(shè)置View可見(jiàn)性
設(shè)置view為visible或者gone需要通過(guò)view.Visibility = View.VISIBLE
or view.visibility = View.GONE
,有了擴(kuò)展方法之后就不需要寫(xiě)這個(gè)了
fun View.visible(){
visibility = View.VISIBLE
}
fun View.gone(){
visibility = View.GONE
}
現(xiàn)在你只需要調(diào)用view.visible()
和view.gone()
將Asset文件讀入到String中
fun AssetManager.fileAsString(subdirectory:String,filename:String):String{
return open("$subdirectory/$filename").use{
it.readBytes().toString(Charset.defaultCharset())
}
}
現(xiàn)在我們可以調(diào)用如下代碼
val json = context.assets.fileAsString("json","config.json")
通過(guò)API 級(jí)別檢索一個(gè)color資源
API 23之前粗卜,檢索一個(gè)color 資源使用的是context.getColor(R.color.my_color)
,但是從23開(kāi)始屋确,添加了一個(gè)新參數(shù),如果你不需要指定主題資源续扔,為了使使用起來(lái)更簡(jiǎn)單并且在所有的API級(jí)別上都可以運(yùn)行:
fun Context.color(@ColorRes id:Int) = when{
isAtLeastMarshmallow() -> resources.getColor(id,null)
else -> resources.getColor(id)
}
現(xiàn)在調(diào)用context.color(R.color.my_color)
就可以獲取顏色了攻臀,你甚至可以將主題資源作為默認(rèn)的可選參數(shù)
Inflate a Layout
fun Context.inflate(res:Int,parent:ViewGroup?=null):View{
return LayoutInflater.from(this).inflate(res,parent,false)
}
現(xiàn)在我們可以寫(xiě)context.inflate(R.layout.my_layout)
.
使用JetBrains的Anko開(kāi)源庫(kù)
JetBrains已經(jīng)為了使Android開(kāi)發(fā)變的更簡(jiǎn)單做了很多的工作。他們?cè)贏(yíng)nko庫(kù)中創(chuàng)建了很多的擴(kuò)展方法纱昧,你可以自如的使用而不用創(chuàng)建任何自定義的擴(kuò)展方法刨啸。
例如,獲取西戎服務(wù)识脆,使用Anko變得更簡(jiǎn)單
val manager = context.notificationManager
他們的擴(kuò)展屬性如下所示:
val Context.notificationManager: NotificationManager
get() = getSystemService(Context.NOTIFICATION_SERVICE) as NotificationManager
Android有很多很強(qiáng)大的APIs设联,但是他們常常要受到j(luò)ava的限制,使用Kotlin灼捂,你可以創(chuàng)建自己更常用的API离例。
原文地址:https://m.signalvnoise.com/using-kotlin-to-make-android-apis-fun-again-14690975afb6