Android@Kotlin(三)扩展变量与其它技巧

到现在,我们已经可以使用比XML更少的代码完成View的构建,更别说Java了。Kotlin的语法为声明式,View之间的嵌套也十分清晰,而且我们还可以给类很方便地添加实用方法。

但在上一篇的结尾我们提到要给View设置左内边距并不容易实现。如果硬是要用Kotlin做这件事,就需要如下编码,注意其中我们需要调用setPadding()并传入四个参数,而不是给一个由JavaBean风格的getter/setter生成的模拟属性赋值。


为了使构建View的代码风格一致,我们更愿意直接给左内边距赋值,而不是调用有四个参数的方法。你可能想到给View类添加一个扩展方法setleftPadding(int)。这样做OK,但是你无法通过lambda with receiver这样写:leftPadding = dp_i(16),原因是由Kotlin生成的长相类似JavaBean的方法不会生成模拟变量,只有Java类中的成员方法可以。

但是,Kotlin可以定义扩展属性,长得和Java类与方法中的变量差不多。一个扩展变量会像Kotlin扩展方法一样被移植到存在的类中,所以可以直接通过该类实例访问,只需你在代码中导入扩展变量。

我们可以定义一个扩展变量使得对于左内边距的设置代码能和其他属性设置代码风格一致。下面的代码设置了左内边距,其他类似:

所以TextView就可以这样创建了:

所有属性的设置代码风格变一致了,棒!

对于padLeft扩展属性有如下几点需要注意:

  • 扩展属性的注解是class dot property,注意与扩展方法的class dot function注解区别开。

  • 扩展属性的类型在冒号后指定。

  • 通过var关键字声明,这也是Kotlin中声明可变变量的关键字,也就是可以直接赋值。如果要声明不可变的只读变量则使用val关键字。

  • 一个可变的扩展属性需要我们同时提供getter和setter的实现。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值