Jetpack:007-Kotlin中的Button

news2024/11/26 10:50:45

文章目录

  • 1. 概念介绍
  • 2. 使用方法
    • 2.1 Button
    • 2.2 IconButton
    • 2.3 ElevatedButton
    • 2.4 OutlinedButton
    • 2.5 TextButton
    • 2.6 FloatingActionButton
  • 3. 示例代码
  • 4. 内容总结

我们在上一章回中介绍了Jetpack中输入框相关的内容,本章回中将要介绍 Button。闲话休提,让我们一起Talk Android Jetpack吧!

1. 概念介绍

我们在本章回中介绍的Button是指按钮,它是程序中常用的组件,它主要用来触发用户的点击事件,jetpack中提供了各种各样的Button,我们在本章回中将详细介绍这些Button的种类和使用方法。

2. 使用方法

2.1 Button

这个是最常用的按钮,它表示带有背景色的按钮,它通过Button可组合函数实现,该函数中常用的参数如下:

  • border参数:主要用来控制Button的边框;
  • colors参数:主要用来控制Button的背景色,文字颜色;
  • onClick参数:它是方法类型,主要用来响应Button的点击事件;

除了参数外,Button还可以通过尾部的lambda来组合其它组件,比如在尾部组合Text()可以给Button添加文字,组合Icon可以给Button添加图标。我们将在后面的小节中通过示例代码来演示它们的组合方法,同时也会演示如何使用上面介绍过的参数。

2.2 IconButton

该Button表示带有图标的按钮,按钮没有边框和背景色,它通过IconButton()可组合函数实现,该函数的参数和Button中的参数类似,因此不再介绍了。它可以组合Text()或者Icon()实现带文本或者图标的按钮,不过Text和Icon只能组合其中的一个函数,不能同时组合两个函数。

2.3 ElevatedButton

该Button表示没有边框但是有背景色的按钮,它通过ElevatedButton()可组合函数实现,该函数的参数和Button中的参数类似,因此不再介绍了。它可以组合Text()实现带文本的按钮。

2.4 OutlinedButton

该Button表示有边框但是没有背景色的按钮,它通过OutlinedButton()可组合函数实现,该函数的参数和Button中的参数类似,因此不再介绍了。它可以组合Text()实现带文本的按钮,它的效果和ElevatedButton()函数实现的按钮效果正好相反。

2.5 TextButton

该Button表示没有边框和背景色的按钮,它通过TextButton()可组合函数实现,该函数的参数和Button中的参数类似,因此不再介绍了。它可以组合Text()实现带文本的按钮。它的效果和文本类似,只是可以响应点击事件。

2.6 FloatingActionButton

该Button表示悬浮按钮,它不但有边框和背景色,还有阴影效果,它通过FloatingActionButton()可组合函数实现,该函数的参数和Button中的参数类似,因此不再介绍了。它可以组合Text()实现带文本的悬浮按钮。

还有一个ExtendedFloatingActionButton()函数也可以实现悬浮按钮,它可以同时组合Text和Icon两个函数,进而实现带有图标和文本的悬浮按钮。

3. 示例代码

Column(
    horizontalAlignment = Alignment.CenterHorizontally,
    verticalArrangement = Arrangement.SpaceBetween,
    modifier = Modifier.fillMaxWidth()
) {

    val interactionSource = remember {
        MutableInteractionSource()
    }

    //定义按钮不同状态下的颜色
    val pressState = interactionSource.collectIsPressedAsState()
    val borderColor = if (pressState.value) Color.Black else Color.White
    val backgroundColor = if (pressState.value) Color.White else Color.Black
    val textColor =  if (pressState.value) Color.Black else Color.White

    //基础button,圆角形状,无边框但是有背景色
    Button(
        border = BorderStroke(width = 2.dp, color = borderColor),
        colors = ButtonDefaults.buttonColors(
            containerColor = backgroundColor,
            contentColor = textColor
        ),
        //用来控制按钮不同状态下的颜色
        interactionSource = interactionSource,
        onClick = {
            Log.d("tag","bt is clicked")
        }) {
        //图标和文本可以并列存放
        Icon(Icons.Filled.Add, contentDescription = null)
        Spacer(modifier = Modifier.size(8.dp))
        Text(text = "Add")
    }

    //带icon的button,不过icon和文字重叠了,无边框,无背景色
    IconButton(onClick = {  }) {
        Icon(Icons.Default.Add, contentDescription = null)
        Text(text = "Add")
    }

    //浅色背景的按钮,无边框有背景色
    ElevatedButton(onClick = {}) {
        Text(text = "Add")
    }

    //只有边框没有背景色的按钮
    OutlinedButton(onClick = {}) {
        Text(text = "Add")
    }


    //无边框,无背景色的按钮
    TextButton(onClick = {}) {
        Text(text = "Add")
    }


    //悬浮按钮,带有阴影效果
    FloatingActionButton(onClick = {}) {
        //图标和文字不能并列排放
//            Icon(Icons.Default.Add, contentDescription = null )
        Text(text = "add")
    }

    Spacer(modifier = Modifier.size(16.dp))
    ExtendedFloatingActionButton(onClick = {
        var temp = (1..99).random()
        textContent = "it is $temp"
    }) {
        //图标和文字可以并列排放
        Icon(Icons.Default.Add, contentDescription = null )
        Text(text = "add")
    }
}

上面的代码中演示了刚才介绍所有Button,其中包含Button中的参数以及Button和其它函数组合的用法。此外,我们还利用Button的interactionSource参数来动态修改Button的颜色,这样可以让Button在不同状态下显示不同的颜色,比如默认情况下显示黑色,点击按钮时显示白色。

下面是程序的运行效果图,请大家参考:
在这里插入图片描述

4. 内容总结

最后,我们对本章回中介绍的内容做一个总结:

  • 按钮是程序中常用的组件,它主要用来触发用户的点击事件;
  • 按钮通过可组合函数的参数控制自身的效果,以及响应用户的点击事件;
  • 按钮可以组合Text和Icon函数,实现带文本和图标和按钮;
  • 按钮有多个种类,不同种类的按钮只是显示效果不同,它们本质上的用法都一样;

看官们,关于Jetpack中Button组件相关的内容就介绍到这里,欢迎大家在评论区交流与讨论!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1092840.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

微信小程序入门讲解【超详细】

一. 微信小程序简介 1.1 什么是小程序 2017年度百度百科十大热词之一 微信小程序(wei xin xiao cheng xu),简称小程序,英文名Mini Program,是一种不需要下载安装即可使用的应用( 张小龙对其的定义是无需安装&#xf…

C++指针解读(5)-- 指针和数组(多维数组)

相比一维数组,二维数组的概念和相关运算要复杂得多。 1、二维数组的存储及访问 假设有这么一个二维数组: int arr[3][4] {{ 10, 11, 12, 13 },{ 20, 21, 22, 23 },{ 30, 31, 32, 33 } }; 我们可以把二维数组看成数组的数组: &#xff…

Spring Cloud--Nacos+@RefreshScope实现配置的动态更新

原文网址:Spring Cloud--NacosRefreshScope实现配置的动态更新_IT利刃出鞘的博客-CSDN博客 简介 说明 本文介绍SpringCloud整合Nacos使用RefreshScope实现动态更新配置。 官网 Nacos Spring Cloud 快速开始 动态更新的介绍 动态更新的含义:修改应…

TOR(Top of Rack)

TOR TOR(Top of Rack)指的是在每个服务器机柜上部署1~2台交换机,服务器直接接入到本机柜的交换机上,实现服务器与交换机在机柜内的互联。虽然从字面上看,Top of Rack指的是“机柜顶部”,但实际T…

简述什么是值传递和引用传递?

1、什么是值传递,什么是引用传递? 值传递(pass by value)是指在调用函数时将实际参数复制一份传递到函数中,这样在函数中如果对参数进行修改,将不会影响到实际参数。 引用传递(pass by reference)是指在调用函数时将实际参数的地址直接传递到函数中,那么在函数中对参数…

位于同一子网下的ip在子网掩码配置错误的情况下如何进行通信(wireshrak抓包分析)

前言 最近看书发现个问题,正好想学习下wireshark的使用,于是抓包做了下实验。 问题是这样的,假设有服务器A和服务器B,正确配置下两者处于同一子网;此时B的网络配置正确,而A在配置子网掩码时出了错&#xff…

Linux寄存器+Linux2.6内核进程调度队列+命令行参数+环境变量

目录 一、寄存器 二、Linux2.6内核进程调度队列 (一)优先级 (二)活动队列 (三)过期队列 (四)active指针和expired指针 三、命令行参数 (一)举例一 &…

二分查找:如何用最省内存的方式实现快速查找功能?

文章来源于极客时间前google工程师−王争专栏。 有序数据集合的查找算法:二分查找(Binary Search)算法,也叫折半查找算法。二分查找的思想非常简单,但是难掌握好,灵活运用更加困难。 问题:假设有1000万个整数数据&…

用 Three.js 创建一个酷炫且真实的地球

接下来我会分步骤讲解,在线示例在数字孪生平台。 先添加一个球体 我们用threejs中的SphereGeometry来创建球体,给他贴一张地球纹理。 let earthGeo new THREE.SphereGeometry(10, 64, 64) let earthMat new THREE.MeshStandardMaterial({map: albed…

2023年建筑电工(建筑特殊工种)证考试题库及建筑电工(建筑特殊工种)试题解析

题库来源:安全生产模拟考试一点通公众号小程序 2023年建筑电工(建筑特殊工种)证考试题库及建筑电工(建筑特殊工种)试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人…

搭建Umijs环境并创建一个项目 介绍基本操作

上文 Umijs介绍中 我们简单了解了一下这个东西 这里 我们还是不要关说不练了 直接终端执行 npm install -g umi可能会比较久 因为这个东西还挺大的 我们执行 umi -v这里就会输出版本 然后 我们创建一个文件夹目录 作为项目目录 然后 我们可以 通过 终端输入 mkdir 项目名称…

使用 Go 和 Wails 构建跨平台桌面应用程序

由于多种原因,Electron 曾经(并且仍然)大受欢迎。首先,其跨平台功能使开发人员能够从单个代码库支持 Linux、Windows 和 macOS。最重要的是,它对于熟悉 Javascript 的开发人员来说有一个精简的学习曲线。 尽管它有其缺…

LENOVO联想笔记本小新 Pro-14 2021AMD处理器ACH版(82MS)原厂Win10系统

下载链接:https://pan.baidu.com/s/1-KZ8Y9NmkS7nDXcMbhZLHw?pwdyrkx 系统自带所有驱动、出厂主题壁纸、系统属性专属LOGO标志、Office办公软件、lenovo联想电脑管家等预装程序 所需要工具:16G或以上的U盘 文件格式:ISO 文件大小&#xff1…

VScode运行C/C++

VScode运行C/C VScode的安装这里不讲 一、mingw64的下载 二、VS code打开文件夹与创建C文件 ----------------这一步给萌新看,有C和VScode的基础可跳过---------------- 1.创建一个文件夹 2.vscode打开刚刚创建的文件夹 3.新建文件,在输入文件名1.c后…

C语言中的文件操作指南

阅读导航 前言一、文件类型1. 程序文件2. 数据文件PS.文件名 二、文件的打开和关闭1. 文件指针2. 文件的打开和关闭 三、文件的顺序读写四、文件的随机读写1. fseek() 函数2. ftell() 函数3. rewind() 函数 总结 前言 在C语言中,文件操作是一项重要的任务。通过文件…

20和遍历以及迭代器有关的一些东西

知识点有点散,只能这样记录了 1、这边是和遍历有关的: class Person:def __init__(self):self.result 1def __getitem__(self, item):self.result 1if self.result > 6:raise StopIteration(停止遍历)return self.resultpassp Person() for i in…

Unity中Shader光照模型Phong的实现

文章目录 前言一、对主平行光实现高光效果1、在属性面板定义高光颜色2、在属性面板定义高光系数3、在属性面板定义高光范围系数4、获取 V (模型顶点的世界坐标 指到 相机世界坐标 的单位向量)5、由上一篇推理出的公式得到  R 向量6、由公式计算得出高光效果 二、使用已有的数…

常用的软件项目管理工具一览

软件项目管理工具是帮助团队成功管理和完成软件开发项目的软件程序和应用程序。根据项目及其规模和复杂性,可以使用各种各样的这些工具来协助完成任务,从任务跟踪和调度,到项目报告,到版本控制和协作。 项目经理对软件项目的整体成…

Git 回退代码的两种方法对比

Git 回退代码版本 在项目的开发中,有时候还是会出现,一些误提交了一些代码,这时候就会想撤回提交的代码,在Git中有两种方法可以使用,现在通过对比方法比较这两种方法的区别,分别适用于哪些情况&#xff1f…

Google zxing 生成带logo的二维码图片

环境准备 开发环境 JDK 1.8SpringBoot2.2.1Maven 3.2 开发工具 IntelliJ IDEAsmartGitNavicat15 添加maven配置 <dependency><groupId>com.google.zxing</groupId><artifactId>core</artifactId><version>3.4.0</version> </…