Kotlin实战指南十一:扩展函数
生活随笔
收集整理的這篇文章主要介紹了
Kotlin实战指南十一:扩展函数
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
轉載請標明出處:https://blog.csdn.net/zhaoyanjun6/article/details/94640013
本文出自【趙彥軍的博客】
擴展函數是Kotlin提供的非常酷的特性,在編寫Android應用程序時,你將發現自己會大量使用它。
我們必須承認Android框架有時做些事有點困難,在Java中我們唯一的解決方案是把我們要做事封裝起來,或利用可讀性差的類靜態方法。
你想怎樣才能加額外函數到框架類?這就是Kotlin擴展函數允許我們做的。
在Android中我們要顯示和隱藏一個 view ,通常這樣做:
class MainActivity : AppCompatActivity() {private var tv: TextView? = nulloverride fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)tv = findViewById(R.id.tv)tv?.visibility = View.VISIBLE //view顯示tv?.visibility = View.GONE //view隱藏} }那么用擴展函數怎么做,我們首先對 View擴展兩個方法
//擴展函數,view隱藏 fun View.gone() {visibility = View.GONE }//擴展函數,view顯示 fun View.visible() {visibility = View.VISIBLE }使用:
class MainActivity : AppCompatActivity() {private var tv: TextView? = null//擴展函數,view隱藏fun View.gone() {visibility = View.GONE}//擴展函數,view顯示fun View.visible() {visibility = View.VISIBLE}override fun onCreate(savedInstanceState: Bundle?) {super.onCreate(savedInstanceState)setContentView(R.layout.activity_main)tv = findViewById(R.id.tv)tv?.visible() //view顯示tv?.gone() //view隱藏} }一些常用的擴展函數
我們對一些可能會用到的擴展函數做了一個整理:
ViewExtends.kt 對 View 的擴展
import android.view.Viewfun View.gone() {visibility = View.GONE }fun View.visible() {visibility = View.VISIBLE }var View.topMargin: Intget():Int {return (layoutParams as ViewGroup.MarginLayoutParams).topMargin}set(value) {(layoutParams as ViewGroup.MarginLayoutParams).topMargin = value}var View.bottomMargin: Intget():Int {return (layoutParams as ViewGroup.MarginLayoutParams).bottomMargin}set(value) {(layoutParams as ViewGroup.MarginLayoutParams).bottomMargin = value}var View.rightMargin: Intget():Int {return (layoutParams as ViewGroup.MarginLayoutParams).rightMargin}set(value) {(layoutParams as ViewGroup.MarginLayoutParams).rightMargin = value}var View.leftMargin: Intget():Int {return (layoutParams as ViewGroup.MarginLayoutParams).leftMargin}set(value) {(layoutParams as ViewGroup.MarginLayoutParams).leftMargin = value}TextViewExtends.kt 對 TextView 的擴展
import android.widget.TextView/*** 設置顏色直接使用colors.xml中定義的顏色即可*/ fun TextView.setColor(resId: Int) {this.setTextColor(resources.getColor(resId)) }fun TextView.setDrawableLeft(resId: Int) {var drawable = this.context.resources.getDrawable(resId)drawable.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight)this.setCompoundDrawables(drawable, null, null, null) }fun TextView.setDrawableRight(resId: Int) {var drawable = this.context.resources.getDrawable(resId)drawable.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight)this.setCompoundDrawables(null, null, drawable, null) }fun TextView.setDrawableTop(resId: Int) {var drawable = this.context.resources.getDrawable(resId)drawable.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight)this.setCompoundDrawables(null, drawable, null, null) }fun TextView.setDrawableBottom(resId: Int) {var drawable = this.context.resources.getDrawable(resId)drawable.setBounds(0, 0, drawable.minimumWidth, drawable.minimumHeight)this.setCompoundDrawables(null, null, null, drawable) }ContextExtends.kt 對Context的擴展
import android.content.Context import android.view.Gravity import android.widget.Toast//----------toast---------- fun Context.toast(text: CharSequence, duration: Int = Toast.LENGTH_SHORT) {Toast.makeText(this, text, duration).show() }fun Context.toast(resId: Int, duration: Int = Toast.LENGTH_SHORT) {Toast.makeText(this, resId, duration).show() }fun Context.centerToast(resId: Int, duration: Int = Toast.LENGTH_SHORT) {var t = Toast.makeText(this, resId, duration)t.setGravity(Gravity.CENTER, 0, 0)t.show() }//----------尺寸轉換----------fun Context.dp2px(dpValue: Float): Int {val scale = resources.displayMetrics.densityreturn (dpValue * scale + 0.5f).toInt() }fun Context.px2dp(pxValue: Float): Int {val scale = resources.displayMetrics.densityreturn (pxValue / scale + 0.5f).toInt() }fun Context.sp2px(spValue: Float): Int {val scale = resources.displayMetrics.scaledDensityreturn (spValue * scale + 0.5f).toInt() }fun Context.px2sp(pxValue: Float): Int {val scale = resources.displayMetrics.scaledDensityreturn (pxValue / scale + 0.5f).toInt() }總結
我在github 上找了一個常用的擴展庫,大家可以看看,非常有用。
https://github.com/shiweibsw/Android-kotlin-extend-utils
個人微信號:zhaoyanjun125 , 歡迎關注
總結
以上是生活随笔為你收集整理的Kotlin实战指南十一:扩展函数的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Kotlin实战指南十:let、appl
- 下一篇: Kotlin实战指南十二:data cl