Jetpack:007-各种各样的Button

news2025/2/1 16:48:17

文章目录

  • 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/1093757.html

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

相关文章

Linux系统编程02

makefile的原理 问题需求 之前我们讲过C语言代码主要是经过编译和链接两个步骤生成目标文件,但是在编译的时候我们可能需要进行多条指令的输入,要对main函数所在的文件进行汇编,再将我们定义的函数文件进行汇编,分别形成*.o文件&a…

网课、会议投屏自动截屏软件推荐 —— 使用定时自动截屏软件,自动截屏网课、会议投屏,方便回顾、整理

在当前的远程学习和工作环境下,我们经常需要参加网课和会议,而这些内容通常都是通过投屏的方式呈现给我们的。为了更好地记录和回顾这些内容,我们可以使用定时截屏软件来保存这些投屏截屏。 定时截屏软件功能 定时截屏软件可以帮助我们定时…

ModSecurity开源WAF防火墙和控制面板安装教程

ModSecurity开源WAF防火墙和控制面板安装教程 CyberPanel带有两个版本,一个是CyberPanel,另一个是CyberPanel Ent。CyberPanel附带OpenLiteSpeed,不限数量域名完全免费。CyberPanel Ent附带LiteSpeed Web Server Enterprise,只免…

2023年中国门把手产量、销量及市场规模分析[图]

门把手行业是指专门从事门把手的设计、制造、销售和安装等相关业务的行业。门把手是门窗装饰硬件的一种,用于开启和关闭门窗,同时也具有装饰和美化门窗的作用。 门把手行业分类 资料来源:共研产业咨询(共研网) 随着消…

leetCode 72. 编辑距离 动态规划 + 滚动数组 + 优化空间

72. 编辑距离 - 力扣(LeetCode) 给你两个单词 word1 和 word2, 请返回将 word1 转换成 word2 所使用的最少操作数 。你可以对一个单词进行如下三种操作: 插入一个字符删除一个字符替换一个字符 编辑距离的应用场景:…

200多万开发者才开发91款应用,国产手机操作系统离开安卓活不了?

随着某国产手机操作系统强调将不再兼容安卓,他们沸腾了,表示将真正独立自主发展,然而业界人士却指出号称拥有220万开发者的该款操作系统至今仅开发了91款应用,彻底撕下了它的遮羞布。 应用对一个智能操作系统有多重要,…

Go 代码块与作用域,变量遮蔽问题详解

Go 代码块与作用域详解 文章目录 Go 代码块与作用域详解一、引入二、代码块 (Block)2.1 代码块介绍2.2 显式代码块2.3 隐式代码块2.4 空代码块2.5 支持嵌套代码块 三、作用域 (Scope)3.1 作用域介绍3.2 作用域划定原则3.3 标识符的作用域范围3.3.1 预定义标识符作用域3.3.2 包代…

互联网Java工程师面试题·Java 并发编程篇·第八弹

目录 33、Java 死锁以及如何避免? 34、死锁的原因 35、怎么唤醒一个阻塞的线程 36、不可变对象对多线程有什么帮助 37、什么是多线程的上下文切换 38、如果你提交任务时,线程池队列已满,这时会发生什么这里区分一下: 39、J…

探索JDK8新特性,Stream 流:构建流的多种方式

当我们处理集合数据时,往往需要对其进行各种操作,如过滤、映射、排序、归约等。在 Java 8 中引入的 Stream 流为我们提供了一种更加简洁和灵活的方式来处理数据。上述情况都是流对集合进行操作的,但是对于流的创建操作还是不太了解&#xff0…

解密并发编程的时间之谜:揭开Happens-Before的神秘面纱

优质博文:IT-BLOG-CN 一、简介 为什么需要happens-before原则: 主要是因为Java内存模型 , 为了提高CPU效率,通过工作内存Cache代替了主内存。修改这个临界资源会更新work memory但并不一定立刻刷到主存中。通常JMM会将编写的代码…

docker保存镜像出错

报错:open .docker_temp_801673807: Access is denied. 查询后发现是因为C盘权限问题导致失败,修改保存路径:docker save -o D:\nginx.tar nginx:latest后成功。

解决docker使用pandarallel报错OSError: [Errno 28] No space left on device

参考:https://github.com/nalepae/pandarallel/issues/127 在使用pandarallel报错OSError: [Errno 28] No space left on device,根据上述issue发现确实默认使用的MEMORY_FS_ROOT为 /dev/shm,而在docker环境下这个目录大小只有64M&#xff0…

​嵌入式VS纯软件

嵌入式VS纯软件 嵌入式系统开发与纯软件开发之间存在关键差异,涵盖了硬件依赖性、资源限制、实时性要求、安全性和维护等多个方面。最近很多小伙伴找我,说想要一些嵌入式资料,然后我根据自己从业十年经验,熬夜搞了几个通宵&#x…

序列中排列存在类dp问题+结合组合数学和拆贡献:1014T4

http://47.92.197.167:5283/contest/412/problem/4 赛时就想到枚举开头来拆贡献。 先说一下,对于A我们不关心具体的值,我们只关心哪些位置相等,哪些位置不等,最后乘上一个系数就行 然后对于序列是否存在排列类问题有个常见的dp套…

【API篇】二、源算子API

文章目录 0、demo数据1、源算子Source2、从集合中读取数据3、从文件中读取4、从Socket读取5、从Kafka读取6、从数据生成器读取数据7、Flink支持的数据类型8、Flink的类型提示(Type Hints) 0、demo数据 准备一个实体类WaterSensor: Data All…

导航栏参考代码

导航栏参考代码 <!DOCTYPE html> <html> <head> <meta charset"utf-8"> <title>导航栏参考代码</title> </head> <body> <table width"858" border"0" align"center"><tr&g…

ASO优化之应用评分评论对APP下载量增长的重要性

APP应用评分和评论对于下载转化率的效果是显著的&#xff0c;是ASO优化重要的因素之一。应用评分是对应用性能的衡量预判&#xff0c;而应用评论是用户向应用提供的反馈总结。 1、评分的重要性。 应用评分显示在应用商店的搜索结果&#xff0c;特色页面&#xff0c;热门图表中…

第五十七章 学习常用技能 - 查看Globals

文章目录 第五十七章 学习常用技能 - 查看Globals查看Globals测试查询并查看查询计划 第五十七章 学习常用技能 - 查看Globals 查看Globals 要查看一般Globals&#xff0c;可以使用 ObjectScript ZWRITE 命令或管理门户中的全局页面。如果正在寻找存储类数据的Globals&#x…

docker搭建nginx+php-fpm

docker run --name nginx -p 8898:80 -d nginx:1.20.2-alpine# 将容器nginx.conf文件复制到宿主机 docker cp nginx:/etc/nginx/nginx.conf /usr/local/nginx/conf/nginx.conf# 将容器conf.d文件夹下内容复制到宿主机 docker cp nginx:/etc/nginx/conf.d /usr/local/nginx/conf…

Linemod算法研究

转载&#xff0c;这篇博客写的比较详细&#xff0c;分析也到位. https://www.cnblogs.com/aoru45/p/16810996.html