Kotlin实战指南十一:扩展函数
轉(zhuǎn)載請(qǐng)標(biāo)明出處:https://blog.csdn.net/zhaoyanjun6/article/details/94640013
本文出自【趙彥軍的博客】
擴(kuò)展函數(shù)是Kotlin提供的非常酷的特性,在編寫(xiě)Android應(yīng)用程序時(shí),你將發(fā)現(xiàn)自己會(huì)大量使用它。
我們必須承認(rèn)Android框架有時(shí)做些事有點(diǎn)困難,在Java中我們唯一的解決方案是把我們要做事封裝起來(lái),或利用可讀性差的類(lèi)靜態(tài)方法。
你想怎樣才能加額外函數(shù)到框架類(lèi)?這就是Kotlin擴(kuò)展函數(shù)允許我們做的。
在Android中我們要顯示和隱藏一個(gè) 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隱藏} }那么用擴(kuò)展函數(shù)怎么做,我們首先對(duì) View擴(kuò)展兩個(gè)方法
//擴(kuò)展函數(shù),view隱藏 fun View.gone() {visibility = View.GONE }//擴(kuò)展函數(shù),view顯示 fun View.visible() {visibility = View.VISIBLE }使用:
class MainActivity : AppCompatActivity() {private var tv: TextView? = null//擴(kuò)展函數(shù),view隱藏fun View.gone() {visibility = View.GONE}//擴(kuò)展函數(shù),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隱藏} }一些常用的擴(kuò)展函數(shù)
我們對(duì)一些可能會(huì)用到的擴(kuò)展函數(shù)做了一個(gè)整理:
ViewExtends.kt 對(duì) View 的擴(kuò)展
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 對(duì) TextView 的擴(kuò)展
import android.widget.TextView/*** 設(shè)置顏色直接使用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 對(duì)Context的擴(kuò)展
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() }//----------尺寸轉(zhuǎn)換----------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() }總結(jié)
我在github 上找了一個(gè)常用的擴(kuò)展庫(kù),大家可以看看,非常有用。
https://github.com/shiweibsw/Android-kotlin-extend-utils
個(gè)人微信號(hào):zhaoyanjun125 , 歡迎關(guān)注
總結(jié)
以上是生活随笔為你收集整理的Kotlin实战指南十一:扩展函数的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Kotlin实战指南十:let、appl
- 下一篇: Kotlin实战指南十二:data cl