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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

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

發布時間:2024/9/30 编程问答 29 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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实战指南十一:扩展函数的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。