Kotlin学习笔记八、Kotlin简单控件的使用

2023-05-16

1、按钮Button:

Button是Android最常用的控件之一。其用法我们这里主要是关注三个方面 ,一是点击事件,二是长按事件,三是设置文本、、点击背景效果等等。
其中点击事件和长按事件用法上跟Java差不多,主要有匿名函数方式、内部类、接口实现三种。但是设置文本和获取文本有一些变化。

a、匿名函数方式的点击事件和长按事件以及文本处理:

Button的点击事件的实现及注意事项:

btnButton.setOnClickListener {
	//因为it是一个View,因此我们要把它强制转换为Button后,再获取其文本内容或者设置文本内容
	//这里是获取Button的文本内容
	logging("btnButton按钮的点击操作:${(it as Button).text}")
	//下面是设置Button的文本内容
	(it as Button).text = "按钮Button"
}

Button的长按事件的实现及注意事项:

btnButton.setOnLongClickListener {
	logging("按钮btnButton的长按操作:${(it as Button).text}")
	//这里的true是必须返回的,不能少,否则编译报错
	true
}

我们可以看到,Kotlin里面点击事件和长按事件的舰艇大体上和Java差不多,不同的地方是:Java里面的监听是在 setClickListener之后的函数里面创建“new On*ClickListener(){}”的匿名内部类。在Kotlin里面则简单很多,在 setClickListener之后直接通过“{}”**表示监听了。省去了创建匿名内部类这一步。

(it as Button)相当于Java里面的类型强制转换——父类强转为子类。

b、内部内的方式

其实这种方式是比较扯淡的一种方式,先要创建一个内部类实现View.OnClickListener接口,然后再把这个类的对象作为参数传给View的set******ClickListener (),而且每个按钮或者说View的点击事件的逻辑是不一样的,这样的话,你有多少个监听,就要写多少个内部类。毫无效率的重复性工作太多。当然作为一种设置监听的方式,我们不妨学学,多掌握下。具体见下面代码:

inner class ViewOnClickListener : View.OnClickListener {
	override fun onClick(v: View?) {
		//TODO:
	}
}
btnButton.setOnClickListener(ViewOnClickListener())

当然 你也可以通过inner class ViewOnClickListener实现里面的view的id去判断出发点击事件的view是哪一个,然后if…else…或者switch去一个一个的写,免去一个点击事件一个接口实现的苦。然而这并不是好的方式。

c、接口实现的方式

这个很好理解,就跟Java里面一样让Activity实现OnClickListener接口。这个没什么特别讲的。

2、复选框CheckBox:

复选框用于检查和设置有没有选中的控件,该控件要么是选中状态,要么是取消状态。Android中CheckBox复选按钮的勾选状态有两个方法:setChecked()和isChecked(),其中前一个用于设置按钮的选中状态,后一个是一个boolean值,用于获取按钮的选中状态。

但是在Kotlin里面这两个方法都被统一成一个方法:isChecked,当需要给复选框设置选中状态的时候,就通过isChecked赋值,当需要获取复选框的选中状态时,就通过“=isChecked”的方式获取,这跟前面我们对TextView和Button的文本text操作是一个道理。

在Kotlin里面,表示状态的两个方法合并为一个方法的还有很多,详见下面这个表格:
在这里插入图片描述
//CheckBox可以通过setOnCheckedChangeListener方法更改他的选中状态

cbCheckBox.setOnCheckedChangeListener { buttonView, isChecked ->
	logging("isChecked是true表示选中,是false的话表示未选中:$isChecked")
}

//CheckBox也可以通过setOnClickListener去改变他的状态

cbCheckBox.setOnClickListener {
	logging("选中状态:${(it as CheckBox).isChecked}")
}

CheckBox的其他几个is******的属性方法用法跟这个一样。

3、单选按钮RadioButton:

有过Android的Java开发经验都应该知道RadioButton的作用和使用,在一组这样的按钮里面,只能选中一个,不能多选。否则就是复选框了。

同Java一样RadioButton也需要一个父容器RadioGroup,RadioGroup实质上是一个布局,然后每个RadioButton都将作为一个子View放在RadioGroup内,RadioGroup通过orientation属性像LinearLayout那样指定子View—RadioButton是水平排列布局还是竖直排列布局。视图RadioGroup的子View除了RadioButton外,还可以是TextView、ImageView等其他控件,因为RadioGroup是继承自LinearLayout的。因此若无特殊要求,也可以将RadioGroup当做LinearLayout来用。只不过RadioGroup多了一个管理单选按钮的功能。

单选按钮RadioButton默认是未选中的,点击他就表示被选中,此时反复点击该单选按钮并不会被取消选中状态。点击RadioGroup组群中的其他单选按钮,则其他按钮被选中,当前单选按钮被取消选中。

RadioButton的选中事件在实现的时候,首先写一个选中监听实现接口:

RadioGroup.OnCheckChangListener,然后调用RadioGroup对象的setOnCheckedChangListener方法来注册该监听器。具体如下:

rgRadioGroup.setOnCheckedChangeListener { group, checkedId ->
	when(checkedId){
		R.id.rbRadioButton01->logging("${rbRadioButton01.text}说:老婆,我爱你")
		R.id.rbRadioButton02->logging("${rbRadioButton02.text}说:老公,我也爱你")
		else->logging("行为发生了异常,鬼知道怎么回事儿。")
	}
}

4、文本视图TextView

TextView一定是一款APP中使用频率最高的一个控件,在Kotlin中,他的很多属性的使用方式发生了变化,下面我们以TextView实现跑马灯效果为例:

tvMerquee.setOnClickListener {
	tvMerquee.text = "风卷尘沙起 云化雨落地,无数英雄勇四方 人间正气存古今,刀剑穿梭急 情丝缠绕英雄体,情泪伴酒洒边际 饱沾热血书过去"
	tvMerquee.textSize = 16f
	tvMerquee.backgroundColor = Color.WHITE
	tvMerquee.textColor = Color.MAGENTA
	tvMerquee.gravity = Gravity.LEFT or Gravity.CENTER
	tvMerquee.ellipsize = TextUtils.TruncateAt.MARQUEE
	var params = llRadioGroup.layoutParams as LinearLayout.LayoutParams
	params.setMargins(dip(5), 0, dip(5), 0)
	tvMerquee.layoutParams = params
	tvMerquee.singleLine = true
	tvMerquee.isFocusable = true
	tvMerquee.isFocusableInTouchMode = true
}

在这里插入图片描述
在这里插入图片描述

gravity说明:

在Java里面,文本对齐方式存在多种场景的组合,比如垂直居中+水平居左或者垂直置底+水平居右;在java里面我们一般是这么写的:

tvMerquee.setGravity(Gravity.LEFT | Gravity.CENTER);
tvMerquee.setGravity(Gravity.RIGHT | Gravity.BOTTOM);

而Kotlin里面则不是上面的写法了,要像下面这么写才生效:

tvMerquee.gravity = Gravity.LEFT or Gravity.CENTER
tvMerquee.gravity = Gravity.RIGHT or Gravity.BOTTOM

像上面的这种这个属性组合使用,我们通常意义上理解的是Gravity.LEFT 且 Gravity.CENTER;但是从Java代码来看我们都理解错了。这一点我们要注意。
可以看到Kotlin里面用到了or这个运算符,Kotlin里面还有其他一些这样的运算符:
在这里插入图片描述

5、图像控件ImageView

这个控件的重要性以及使用频率我就不多说了,但凡Android开发者都知道的。图像控件ImageView常用的方法API有以下几个:

setImageDrawable():设置图形的Drawable图像
setImageResource():设置图形的资源ID
setImageBitmap():设置位图

关于setScaleType():设置图形在ImageView中的拉伸格式,详见《ImageView的scaleType属性详解》

在Kotlin里面ScaleType属性的设置方式:

ivScaleType.scaleType = ScaleType.******

其他用法跟Java里面的用法一样。

6、文本编辑框EditText:

同样的,这个控件的重要性就不多说了。

为了规范用户的输入信息,EditText提供了setInputType方法,同于过滤合法的输入字符,只用满足指定条件的字符才允许接收并显示出来。Kotlin里面可以直接给inputType属性设置输入类型,以取代setInputType的方法调用,详情如下:
在这里插入图片描述
EditText控件因为是继承于TextView,因此也有text属性,但是EditText控件是不能直接通过text属性设置值的,也就是不能这样用:

mEditText.text=“******”

会报错误的。只能通过setText()方法对EditText设置文本值:

mEditText.setText(“EditText”)

inputType属性用法:

mEditText.inputType=InputType.TYPE_CLASS_TEXT

给EditText设置文本内容变化的监听:

etMod.addTextChangedListener(object : TextWatcher{
    override fun afterTextChanged(s: Editable?) {

    }
    override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {

    }
    override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {

    }
})
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Kotlin学习笔记八、Kotlin简单控件的使用 的相关文章

  • VS2019配置wxWidgets v3.1.5开发环境

    编译wxWidgets库 如果只是使用wxWidgets DLL库可以省略编译这一步 xff0c 直接下载编译好的库 http wxwidgets org downloads 点击 34 Download Windows Binarires
  • 「LOJ#10015」「一本通 1.2 练习 2」扩散(并查集

    题目描述 一个点每过一个单位时间就会向 444 个方向扩散一个距离 xff0c 如图所示 xff1a 两个点 a b 连通 xff0c 记作 e a b xff0c 当且仅当 a b的扩散区域有公共部分 连通块的定义是块内的任意两个点 u
  • haproxy使用技术及配置详解

    以下内容来源于网络 xff0c 感谢原作者 性能 HAProxy借助于OS上几种常见的技术来实现性能的最大化 单进程 事件驱动模型显著降低了上下文切换的开销及内存占用 O 1 事件检查器 event checker 允许其在高并发连接中对任
  • Edge浏览器,找不到本地书签或收藏夹更新时丢失了,我该怎样找回?

    1 不要着急 xff0c 可以通过以下目录找回 Edge浏览器的书签 xff0c 保存地址 xff0c 在最新版本必然保存在以下位置 xff1a C Users 用户名 AppData Local Packages Microsoft Mi
  • ubuntu系统实现远程控制

    今天在做实验的时候发现用视觉模拟激光竟然用之前的远程启动不了节点 xff08 之前是用工作站连接turtlebot上面的TK1的 xff09 xff0c 然后最后还是用了俩台电脑进行远程控制 xff0c 用到了一点小配置 xff0c 在这里
  • C++11多线程并发中的std::thread、std::mutex和std::future

    C 43 43 11 新标准中引入了五个头文件来支持多线程编程 xff1a lt atomic gt lt thread gt lt mutex gt lt condition variable gt 和 lt future gt lt a
  • 银河麒麟操作系统以root用户登录的方法

    默认情况下 xff0c 银河麒麟V10操作系统不允许root用户登录 xff0c 也不告诉你密码是什么 xff0c 但是如果需要root用户登录的时候 xff0c 可以使用命令 xff1a su 输入密码后 xff0c 就能进入root用户
  • 安装卸载EMBY,jellyfin

    这是个回忆记录 xff0c 怕时间久了忘记了 xff0c 记录可能不太全 环境是 xff1a UNAS xff0c debian xff0c 1 安装emby xff0c 去官网下载emby deb 用命名安装 安装后访问正常 卸载就麻烦了
  • centos8 OPEN LDAP部署

    英文安装文档 比较清晰 xff0c 不过为了以防万一还是记录一下 1 安装 openldap openldap servers root 64 yl08 tools yum install openldap openldap servers
  • [CentOS入门](一)Linux基础

    登陆系统方式 xff1a 文本登陆图形登陆远程登陆 终端的使用方式 xff1a centos有5个虚拟文本终端 xff0c 1个图形终端 tty 命令查看当前虚拟终端 系统支持多用户 xff08 包括使用相同用户 xff09 同时登录系统
  • [Linux]LVM (Linux 逻辑卷管理)

    概念 xff1a LVM是 Logical Volume Manager xff08 逻辑卷管理 xff09 的简写 xff0c 它是Linux环境下对磁盘分区进行管理的一种机制 PV xff1a 硬盘和分区都可以标记为PV xff0c P
  • [CentOS入门](二)Linux Bash

    Bash命令 xff1a Shell是用户与操作系统交互的入口 xff0c Bash是最常用的Linux Shell Bash命令格式 xff1a 命令 选项 参数 中间用空格分隔 命令选项参数ls lh var 如果参数中包含空格则需要在
  • 逻辑回归(LogisticRegression)算法及简单案例

    逻辑回归 LogisticRegression 算法及简单案例 大家好 xff0c 我是W 逻辑回归虽然名字有回归 xff0c 但是实际上是分类模型 xff0c 常用于二分类 回归的意思是 xff1a 在二维空间中找到一条最佳拟合直线去拟合
  • [CentOS入门](三)文件系统

    Linux文件系统结构树 xff1a 目录中颜色的含义 xff1a 青色 xff1a 指向另外一个位置 xff0c 软连接 ls显示文件夹中的文件链接指向位置 xff1a ls folder l蓝色 xff1a 一个文件夹绿色 xff1a
  • [CentOS入门](四)编辑器

    vim xff1a vi vim是一种Linux自带的文本编辑器 xff0c 也是常用的文本编辑器之一 xff0c vim相对于vi增加了代码颜色等功能 部分Linux最小化安装时会预装vi xff0c 但不包含vim xff0c 手动安装
  • [CentOS入门](五)系统软件管理

    RPM RPM是由红帽开发 xff0c 用于管理软件包的组件 xff0c 但是其原始设计理念是开放式的 xff0c 包括OpenLinux S u S E 以及Turbo Linux等Linux的分发版本都有采用 rpm是软件的最小单位 r
  • [CentOS入门](六)用户、组、权限

    用户 xff1a 用户ID为0的用户为超级用户 xff0c 0 500之间为系统级用户 xff0c 为服务保留 xff0c 通常情况新建的用户UID gt 500 用户文件保存在 etc passwd文件中 组 xff1a 每个用户有一个私
  • Traccar记录足迹-服务搭建及使用

    Traccar介绍 Traccar是一款开源的可以跟踪GPS设备位置的应用 xff0c 服务端支持Windows x64 Linux x64 Linux ARM 客户端支持GPS设备 Android设备 IOS设备 搭建Traccar服务器
  • [网络]OSPF理论

    特性 xff1a 分类 xff1a 无类 xff0c 链路状态协议封装 xff1a ip xff08 89 xff09 更新目标地址 xff1a 224 0 0 5 224 0 0 6 支持单播更新方式 xff1a 定时 完整定时更新 xf
  • [网络]IPV6

    IPV6优势 xff1a 更大地址空间 xff08 2 128 xff09 端到端的全球可达性层次化编址利于聚合 xff08 每个运营商一个地址块 xff09 组播的使用 xff08 Server传播一份流量 xff0c 通过组播扩散到用户

随机推荐

  • Proxmox VE(PVE)+ceph+物理网络规划-超融合生产环境安装部署案例

    1 Proxmox Virtual Environment介绍 Proxmox VE 是用于企业虚拟化的开源服务器管理平台 它在单个平台上紧密集成了KVM虚拟机管理程序和LXC xff0c 软件定义的存储以及网络功能 借助基于Web的集成用
  • [XPlane11/12]同步更新Zibo737插件下载-更新至3.54.17-插件搬运

    Boeing B737 800X mod 链接中包括XPlane11和XPlane12版 XPlane11版本已更新至3 54 17 xff1b XPlane12版本已更新至2 1 一 下载链接 xff1a 捐助ZIBOmod xff1a
  • Proxmox VE(PVE)备份组件:PBS(Proxmox Backup Server)部署及使用教程

    1 Proxmox Backup Server xff08 pbs xff09 介绍 Proxmox Backup Server xff08 pbs xff09 是与pve配套的备份解决方案 xff0c 用于备份和恢复虚拟机 容器和物理主机
  • maven mirror

    lt mirror gt lt id gt UK lt id gt lt name gt UK Central lt name gt lt url gt http uk maven org maven2 lt url gt lt mirro
  • 1002 A+B for Polynomials (25分)

    题目大意 输入两行 xff0c 每行格式如上 xff0c K为多项式中非零项的个数 xff0c N为指数 xff0c aN为该项的系数 最后输出两个多项式的和 思路 xff1a 用一个结构体数组 ploy xff0c 数组中的每个元素存储该
  • linux/unix 使用airport

    把airport引入到用户命令里 xff0c 建立一个软连接 span class hljs built in sudo span ln span class hljs operator s span System Library Priv
  • 网页中提取SWF游戏文件及运行修改

    1 下载游戏到本地 以4399游戏为例 首先需要找到游戏页面如下 xff1a
  • k8s快速部署,附带脚本

    内容导航 xff08 一 xff09 资产信息 xff08 二 xff09 脚本内容 xff08 三 xff09 网络插件flannel1 xff0c 使用flannel网络插件2 xff0c 修改网络模式为ipvs xff0c svc无法
  • pandas处理大文件

    目录 思路一 xff1a 分而治之 思路二 xff1a 精简数据 demo 思路一 xff1a 分而治之 分而治之 xff0c 分批次加载大文件 xff0c 每次读取一定行数的数据 xff0c 读一批处理一批 此方法简单有效 xff0c 易
  • C++详解:枚举类型 --- enum | Xunlan_blog

    文章目录 一 概念二 定义枚举元素表 三 定义枚举对象的操作 四 要点 amp 技巧实例 一 概念 枚举类型 enumeration xff0c 是C 43 43 中的一种派生数据类型 xff0c 是用户创建的一个集合 xff0c 可以增加
  • 使用vue3+axios和后端交互时无法改变的data中的数据

    今天在编写前端页面的时候 xff0c 打算引入axios进行ajax请求 xff0c 可以在这个过程中遇到了一个非常大的坑 xff0c 先来看看有坑的代码 我们看一下浏览器端的console的打印情况 可以看到 xff0c 第二次打印thi
  • Ubuntu20.04搜狗输入法官方安装指南实操

    前言 linux下也想用已经熟悉的搜狗输入法 xff0c 于是乎 xff0c 在网上查各种教程 xff0c 发现很多都不能成功 xff0c 在要放弃的时候 xff0c 下面这个链接帮助自己完成了这个任务 xff1a 官方教程 xff1a U
  • 国王游戏——c++实现

    题目描述 恰逢 H 国国庆 国王邀请 n 位大臣来玩一个有奖游戏 首先 他让每个大臣在左 右手上面分别写下一个整数 xff0c 国王自己也在左 右手上各写一个整数 然后 xff0c 让这 n 位大臣排成一排 xff0c 国王站在队伍的最前面
  • 正确打开db文件的方式,避免乱码和无意义内容

    db文件如果用记事本或者Notepad 43 43 打开 xff0c 会显示乱码 xff0c 改变编码不能解决问题 xff0c 如果用UltraEdit打开 xff0c 可以看到进制数据 xff0c 但是无意义的 正确的方法有多种 xff1
  • 深度优先搜索——枚举组合

    所谓枚举组合 xff0c 其实就是从若干个选若干个数 比如x 1 x 2 x 3 x 4 x n 每个数字时0 xff08 不选 xff09 和1 xff08 选 xff09 x表示当前选到第几个书 xff0c dep表示选了几个数 对于每
  • 更新个祥硕ASM1153E开卡转接板的固件,详细教程

    固态硬盘开卡需要使用USB转接板 连接电脑 xff0c 使用那些未经验证的普通硬盘盒开卡 xff0c 经常会碰到一些千奇百怪的错误而导致开卡失败 xff0c 专用开卡板可以让你少走很多弯路 注意 xff1a 目前sata转usb的桥接芯片
  • Android获取OAID

    目录 写在最前面 写在前面 说明文档 SDK使用过程 xff1a 代码实现 写在最前面 看评论有好些朋友遇到了一些我没遇到的问题 xff0c 而且看官方文档也已经更新 xff0c 想着这些问题官方是不是已经优化解决了 xff0c 就按着最新
  • Java基础——隐式转换vs强制转换

    在定义变量时 xff0c 有许多要注意的问题 xff0c 一不小心就会出现损失精度或者不兼容类型等问题 例如 xff1a 1 定义长整型数据时 xff0c 必须加后缀 l 或 L long l 61 123456789012345L 2 定
  • 【Open CASCADE -生成MFC和QT事例方式】

    源代码目录 adm目录 xff1a 包含编译OCCT的相关工程 adm cmake目录 xff1a 包含使用CMake构建OCCT的相关处理脚本 adm msvc目录 xff1a 包含window平台 Visual C 43 43 2010
  • Kotlin学习笔记八、Kotlin简单控件的使用

    1 按钮Button xff1a Button是Android最常用的控件之一 其用法我们这里主要是关注三个方面 xff0c 一是点击事件 xff0c 二是长按事件 xff0c 三是设置文本 点击背景效果等等 其中点击事件和长按事件用法上跟