Kotlin 如何去查找控件并使用

Kotlin 如何去查找控件并使用

方式1:finviewbyId查找控件,并设置属性

class Main5Activity : AppCompatActivity() {

    var tv: TextView? = null
    /**
     * 注意这里不能直接使用,必须是初始化
     *  var tv: TextView
     * */
    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)
        setContentView(R.layout.activity_main5)
        tv = findViewById(R.id.activity_id) as TextView
        tv!!.setText("设置文本")
        tv!!.setTextSize(20f)
        tv!!.setTextColor(Color.parseColor("#123add"))
    }
}

方式2: 导入布局,直接通过id设置

1.导包 import kotlinx.android.synthetic.main. activity_main5. * 颜色标注部分是你的布局名称
2.直接通过布局中的id 查找到控件 ,并设置属性

 tv.text="包裹布局,设置文本"

1:方式3 :导入布局,直接通过id设置

1.申明一个属性代理

 private val tv :TextView  by lazy{
        findViewById(R.id.tv) as TextView
    }

2.直接就可以使用了

 tv.text="通过属性代码设置文本书信"
        tv.textSize= 20F

3.lazy 是kotlin 属性代理的一个实例,他提供了延迟加载机制,换句话说lazy提供了初始化TextView的方法,不过真正意义上的初始化发生在TextView实例第一次使用的时候 ,lazy默认是线程安全的 ,name如何切换到线程不安全的呢?代码如下:

  private val tv :TextView  by lazy(LazyThreadSafetyMode.NONE){

        findViewById(R.id.tv) as TextView

    }
注意:这里lazy属性代理,前面的修饰符只能是 val 不能是var,如果是var修饰可以采用下面这种方式来解决

这里写图片描述

lateinit 的使用还是有很多限制的,比如只能在不可 null 的对象上使用,比须为var,不能为 primitives(Int、Float之类)等等,不过这样逼迫你一定要初始化这个变量的做法,确实能减少我们在开发中的遗漏,从而提高开发效率。

至于 lazy 技术,实际上是 Delegate Properties 的一个应用,也就是属性代理了。在 Kotlin 当中,声明成员属性,除了直接赋值,还可以用 Delegate 的方式来声明,这个 Delegate 需要根据成员的类型(val 或者 var)来提供相应的 getValue 和 setValue 方法,比如一个可读写的 Delegate,需要提供下面的方法:
这里写图片描述

下面通过一个例子来说明自定义Delegate,来访问SharePreference
这里写图片描述

然后我们就可以使用了,不需要关系SharedPreference了,下面是使用的代码
这里写图片描述

于是我们再也不需要重复写那些 getSharedPreference,也不用 edit、commit,再见那些 edit 之后忘了 commit 的日子。有没有觉得非常赞!

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值