您当前的位置: 首页 >  kotlin
  • 0浏览

    0关注

    674博文

    0收益

  • 0浏览

    0点赞

    0打赏

    0留言

私信
关注
热门博文

kotlin之扩展函数

沙漠一只雕得儿得儿 发布时间:2020-12-10 21:43:47 ,浏览量:0

扩展函数

扩展类的函数, 即Extension Function, 可以在已有类中添加新的方法, 比继承更加简洁和优雅.

扩展View的dp转换函数.

// 使用扩展函数
fun View.dp_f(dp: Float): Float {
    // 引用View的context
    return TypedValue.applyDimension(
            TypedValue.COMPLEX_UNIT_DIP, dp, context.resources.displayMetrics)
}

// 转换Int
fun View.dp_i(dp: Float): Int {
    return dp_f(dp).toInt()
}

使用扩展函数:

// 设置属性
v {
    layoutParams = LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT)
    text = "Hello"
    setTextColor(ContextCompat.getColor(applicationContext, R.color.colorAccent))
    padLeft = dp_i(20.0f);
}
扩展属性

扩展属性, 即Extension Property, 即把某些函数添加为数据, 使用”=”, 直接设置或使用.

设置View的padLeft属性.

// 使用扩展属性(extension property)
var View.padLeft: Int
    set(value) {
        setPadding(value, paddingTop, paddingRight, paddingBottom)
    }

    get() {
        return paddingLeft
    }

综合例子:

fun String.times(times: Int): String {
    var builder = StringBuilder()
    for (i in 0 until times) {
        // 这里的this只得调用者本身
        builder.append(this)
    }
    return builder.toString()
}

var String.name:String
    set(v){}
    get() = "123"

class MainActivity : AppCompatActivity() {

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main)
        testValVar()
    }

    fun testValVar() {
    	// test即为上面提到的调用者
        Log.d("thz","test".times(20))
        var str = "tewt"
        Log.d("thz",str.name)
    }
}

打印结果为:

: testtesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttesttest
: 123

 

关注
打赏
1657159701
查看更多评论
立即登录/注册

微信扫码登录

0.1798s