日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 编程问答 >内容正文

编程问答

Kotlin实战指南十一:扩展函数

發(fā)布時(shí)間:2024/9/30 编程问答 25 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Kotlin实战指南十一:扩展函数 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

轉(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)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。