Kotlin学习日志(六)控件使用

本文详细介绍了Kotlin中处理按钮点击事件的三种方式:匿名函数、内部类和接口实现。通过示例代码展示了如何设置点击和长按事件,以及复选框、单选按钮和开关按钮的使用。同时,文章还提到了TextView的跑马灯效果和ImageView的图像拉伸类型。内容适用于Android开发者,特别是正在学习Kotlin的初学者。
摘要由CSDN通过智能技术生成

btn_test.setOnClickListener { btn_test.text = “您点了一下下” }

有没有很熟悉的感觉呢?而长按事件处理和点击事件差不太多,只要在长按代码末尾加上true的返回,就可以了,代码如下:

btn_test.setOnLongClickListener { btn_test.text=“您长按了一小下下”;true }

上面的两种按钮事件代码其实是简化最彻底的表达形式,因为点击事件和长按时间本身存在输入参数,它们的入参是发生了点击和长按动作的视图对象,所以完整的事件处理代码应当保留视图对象这个输入参数。只不过由于多数情况用不到视图对象,因此在Kotlin中把冗余的视图入参给省略了,但是为了弄清楚按钮事件的来龙去脉,还是有必要观察一下它的本来面貌,接下来依次介绍按钮事件的三种Kotlin编码方式:匿名函数、内部类、接口实现。

1. 匿名函数方式

//点击事件第一种:匿名函数方式

btn_test.setOnClickListener { v ->

//Kotlin对变量进行类型转换的关键字as

toast(“您点击了控件:${(v as Button).text}”)

}

从上面的代码可以得出,点击事件的函数代码被符号“ ->” 分成两部分:前一部分的“v” 表示发生了点击动作的视图入参,其类型为View,后一部分则为处理点击事件的具体函数体代码。此时的函数体代码中还有两个值得注意的地方:

(1)因为视图View是基本的视图类型,并不存在文本属性,所以需要把这个视图对象的变量类型转换为按钮Button,然后才能得到按钮对象的文本,Kotlin中的类型转换通过关键字as实现的,具体的转换格式形如“待转换的变量名称 as 转换后的类型名称”。

(2)由于待显示的字符串需要拼接按钮文本,因此需要通过字符串模板表达式"${***} "将按钮文本置于该字符串。

2. 内部类方式

对于包含较多行代码的事件处理,往往给它定义一个内部类,这样该事件的处理代码被完全封装在内部类之中,能够有效增强代码的可读性。下面给按钮的点击和长按事件分别定义内部类,代码如下:

package com.llw.kotlinstart

import androidx.appcompat.app.AppCompatActivity

import android.os.Bundle

import android.view.View

import android.widget.Button

import com.llw.kotlinstart.custom_class.*

import kotlinx.android.synthetic.main.activity_main.*

import org.jetbrains.anko.longToast

import org.jetbrains.anko.toast

class MainActivity : AppCompatActivity() {

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

//点击事件第二种:内部类方式

btn_test.setOnClickListener(MyClickListener())//点击

btn_test.setOnLongClickListener(MyLongClickListener())//长按

}

//点击事件第二种:内部类方式,还记得inner吗,内部类就是在class前面加上inner

private inner class MyClickListener:View.OnClickListener{

override fun onClick(v: View?) {

toast(“您点击了控件:${(v as Button).text}”)

}

}

private inner class MyLongClickListener:View.OnLongClickListener{

override fun onLongClick(v: View): Boolean {

longToast(“您长按了控件:${(v as Button).text}”)

return true

}

}

}

3. 接口实现方式

内部类方式固然使事件代码更加灵活,可如果每个事件都定义新的内部类,要是某个页面上有多个控件都需要监听对应的事件处理,那页面上的代码就会很多,为了解决这个问题,第三种方式➖接口实现方式边应运而生,该方式让页面的Activity类实现事件监听器的接口,并重写监听器的接口方式,使得那些接口方法就像是Activity类的成员方法一样,并且可以毫无障碍地访问该Activity类的所有成员属性和成员方法。下面是示例代码:

package com.llw.kotlinstart

import androidx.appcompat.app.AppCompatActivity

import android.os.Bundle

import android.view.View

import android.widget.Button

import com.llw.kotlinstart.custom_class.*

import kotlinx.android.synthetic.main.activity_main.*

import org.jetbrains.anko.longToast

import org.jetbrains.anko.toast

class MainActivity : AppCompatActivity(), View.OnClickListener, View.OnLongClickListener {

override fun onCreate(savedInstanceState: Bundle?) {

super.onCreate(savedInstanceState)

setContentView(R.layout.activity_main)

//点击事件第三种:Activity实现接口

btn_test.setOnClickListener(this)

btn_test.setOnLongClickListener(this)

}

//点击事件第三种:Activity实现接口

override fun onClick(v: View) {

if (v.id == R.id.btn_test) {

toast(“您点击了控件:${(v as Button).text}”)

}

}

override fun onLongClick(v: View): Boolean {

if (v.id == R.id.btn_test) {

longToast(“您长按了控件:${(v as Button).text}”)

}

return true

}

}

1.2 复选框CheckBox


复选框用于检查有没有选中的控件,只有两种情况,选中和未选中。也就是true和false,在学习复选框的用法之前,先了解一下复合按钮CompoundButton的概念,在Android体系中,CompoundButton是抽象的复合按钮,因为是抽象类,所以不能直接使用,而我们实际开发中用的是它的几个派生类,如复选框CheckBox、单选按钮RadioButton单选按钮、Switch开关按钮,这些派生类均可使用CompoundButton的属性和方法。

在Java中,复合按钮CompoundButton的勾选状态有两个,

  • 9
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值