Android Compose 六:常用组件 Button

Button

1 简单使用

 Button(onClick = { /*TODO*/ }) {Text(text = "我是一只button里的text")}

效果
在这里插入图片描述
颜色为什么是这个样子?
前面Text里我们讲过 主题色会影响组件的颜色
这里我使用的颜色如下

    primary = Color(0xFFFF0000),onPrimary = Color(0xFF00FF00),primaryContainer = Color(0xFFFFFF00),onPrimaryContainer = Color(0xFF00FFFF),secondary = PurpleGrey40,tertiary = Pink40,

所以结果就是

  • 背景使用的是主题的primary颜色
  • 文字使用的 onPrimary

变更背景,文字颜色

 Button(onClick = { /*TODO*/ },colors = ButtonDefaults.buttonColors(containerColor = Color.Yellow,contentColor = Color.DarkGray,)) {Text(text = "我是一只button里的text")}

效果
在这里插入图片描述

2 参数分析

@OptIn(ExperimentalMaterial3Api::class)
@Composable
fun Button(onClick: () -> Unit,modifier: Modifier = Modifier,enabled: Boolean = true,shape: Shape = ButtonDefaults.shape,colors: ButtonColors = ButtonDefaults.buttonColors(),elevation: ButtonElevation? = ButtonDefaults.buttonElevation(),border: BorderStroke? = null,contentPadding: PaddingValues = ButtonDefaults.ContentPadding,interactionSource: MutableInteractionSource = remember { MutableInteractionSource() },content: @Composable RowScope.() -> Unit
) 
2.1 onClick 点击事件

加个日志打印

onClick = {Log.i("text_compose","button点击了")}

结果
在这里插入图片描述
Button可以添加子组件,那么问题来了,子组件也有点击事件,会冲突么,是被拦截了,还是都可以触发呢?

 Button(onClick = {Log.i("text_compose","button点击了")},colors = ButtonDefaults.buttonColors(containerColor = Color.Yellow,contentColor = Color.DarkGray,)) {Text(text = "我是一只button里的text",modifier = Modifier.clickable {Log.i("text_compose","button里的Text点击了")})}

结果: 点击到文字时 内部Text被点击了
在这里插入图片描述
多嵌套几个

 Button(onClick = {Log.i("text_compose","button点击了")},colors = ButtonDefaults.buttonColors(containerColor = Color.Yellow,contentColor = Color.DarkGray,)) {Text(text = "我是一只button里的text",modifier = Modifier.clickable {Log.i("text_compose","button里的Text点击了")})Button(onClick = { Log.i("text_compose", "button里的Button点击了") }) {Text(text = "我是一只button里的text",modifier = Modifier.clickable {Log.i("text_compose","button里的Button里的Text点击了")})}}

结果
在这里插入图片描述

由此可见Button的事件可以向下传递
于是我们 ctrl+左键点点点最后 Button是个Box?
Surface{
Box{
modifier = modifier.clickable{}
}
}

2.2 enabled 控制是否可用

enabled = false, 设置不可用

colors = ButtonDefaults.buttonColors(containerColor = Color.Yellow,contentColor = Color.DarkGray,disabledContainerColor = Color.Magenta),enabled = false,

效果
在这里插入图片描述

点击时
在这里插入图片描述
分析

  • button 设置不可用时 背景或者内容颜色会变化
  • button 不可用时 背景 或者内容颜色 使用的时colors设置的颜色
  • 只是当前设置enable的组件不可用,点击事件也不可用
  • 子组件 点击事件,显示效果,统统可用
2.3 shape 形状

设置圆角矩形
shape = RoundedCornerShape(10.dp)
效果
在这里插入图片描述

2.4 colors 一堆颜色
colors = ButtonDefaults.buttonColors(containerColor = Color.Yellow,contentColor = Color.Red,disabledContainerColor = Color.Magenta,disabledContentColor = Color.Red),

效果
在这里插入图片描述
enabled = false,
效果
在这里插入图片描述

2.5 elevation

在这里插入图片描述
默认 elevation: ButtonElevation? = ButtonDefaults.buttonElevation(),
再点方法 发现 用的是 buttonElevation
于是乎使用

 elevation = ButtonDefaults.buttonElevation(defaultElevation = 10.dp,pressedElevation = 20.dp,focusedElevation = 80.dp,hoveredElevation = 150.dp,disabledElevation = 50.dp,)

效果
在这里插入图片描述
点击效果 仔细看区别,阴影变大了
在这里插入图片描述
那么问题来了 阴影的颜色是否可以变更呢? 如果不能变更的话,是不是可以用box实现这个效果,然后变更阴影颜色?后边再说吧!

2.6 border 边线

border = BorderStroke(2.dp,color = Color.Black)
效果
在这里插入图片描述

2.7 contentPadding 内容的内边距

contentPadding = PaddingValues(20.dp)
效果,对比2.6图
在这里插入图片描述

2.8 interactionSource 与TextField一样 用于设置交互源,以便对按钮进行手势交互

在这里插入图片描述
interactionSource 另找时间统一瞅瞅吧

2.9 content

子组件

3 常用的button 样式
  • 也没啥 - 设计图啥样做啥样吧 哈哈哈
  • 目前 做的项目未用compose,按钮大部分都是用text+drawable的selector.xml 效果做的,使用compose的butten感觉效果比这个要好多的多啊

4 事件的拦截与传递

点击事件 的 穿透拦截
滑动事件的拦截,瀑布流的效果
等 后续单独研究吧喇叭喇叭

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

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

相关文章

什么是合法IP地址?

IP地址,即互联网协议地址,是网络设备在互联网上进行通信的唯一标识符。IP地址有两种主要版本:IPv4和IPv6。为了保证网络通信的正常进行,IP地址需要是合法的。本文将详细阐述什么是合法IP地址,以及其重要性和验证方法。…

如何给实拍添加旋转模糊效果?视频模糊特效PR模板剪辑素材

PR特效模板,高级旋转模糊效果视频模板剪辑素材。 特征: After Effects 2019及以上兼容项目。 Premiere Pro 2021及以上兼容项目。 可用分辨率(4K–HD–方形–移动)。 不需要插件。 包括教程。 免费下载:https://prmu…

宝藏级丨图解项目管理全流程(上篇)

《项目管理知识体系指南》的定义:项目是为创造独特的产品、服务或成果而进行的临时性工作。项目管理就是将各种知识、技能、工具与技术应用于项目活动,以满足项目的要求。项目管理的全流程包括以下几个阶段: 项目启动阶段。这是开始一个新项…

GAN实例基于神经网络

目录 1.前言 2.实验 1.前言 需要了解GAN的原理查看对抗生成网络(GAN),DCGAN原理。 采用手写数字识别数据集 2.实验 import argparse import os import numpy as np import mathimport torchvision.transforms as transforms from torchvi…

RedisTemplate使用最详解(三)--- opsForHash()

1、put(H var1, HK var2, HV var3) 新增hashMap值 var1 为Redis的keyvar2 为key对应的map值的keyvar3 为key对应的map值的值var2相同替换var3 redisTemplate.opsForHash().put("hashValue","map1","value1"); redisTemplate.opsForHash().put(&q…

Java官网下载JDK17版本详细教程(下载、安装、环境变量配置)

第一步,去百度搜索甲骨文官网 第二步 第三步 第四步 第五步 第六步 第七步 第八步 第九步 第十步 然后在系统变量里面找到path-编辑-新建添加这个,点击确定就好了 %JAVA_HOME%\bin 就完成了,接下来测试是否成功。 测试: 第一步&a…

VC++6.0 ListViewReport报表使用例子

操作步骤: 1,拖一个ListContorl控件 2,修改ID名称 3,设置Report样式 3,加入初始化代码 void CDuplicatefilesclearDlg::InitlizationListView() {CListCtrl *lstVew (CListCtrl*)GetDlgItem(IDC_LIST_Main);lstVew-&…

“联宝360“项目深度解析:创新模式与互助机制

大家好,我是吴军,来自一家知名的互联网科技公司,负责产品策略分析。 最近,我观察到社交网络上出现了一个名为“联宝360”的热门项目,它引发了众多团队长的热烈讨论和积极推广。这个项目虽然是在今年年初刚刚启动的&am…

羊大师分析,羊奶健康生活的营养源泉

羊大师分析,羊奶健康生活的营养源泉 羊奶,作为一种古老的饮品,近年来因其独特的营养价值和健康益处而备受关注。今天,羊大师就来探讨一下羊奶与健康之间的紧密联系。 羊奶富含蛋白质、脂肪、维生素和矿物质等多种营养成分。羊奶…

如何做一个厂区的导航地图?工厂导航定位怎么解决方案

厂区定位导航是一种基于位置服务(LBS)的导航系统,通过获取厂区内的位置信息,为用户提供准确的导航服务。该系统能够实时显示用户当前位置,提供目的地导航、路径规划、实时定位、语音提示等功能,帮助用户快速…

Process Monitor下载安装使用教程(图文教程)超详细

「作者简介」:2022年北京冬奥会网络安全中国代表队,CSDN Top100,就职奇安信多年,以实战工作为基础对安全知识体系进行总结与归纳,著作适用于快速入门的 《网络安全自学教程》,内容涵盖系统安全、信息收集等…

maven的安装与配置(超详细)

在Java开发中,配置Maven环境有几个重要的原因: 依赖管理:Maven 是一个强大的依赖管理工具,它能够帮助开发人员轻松地管理项目所需的各种第三方库和组件。通过在项目的 Maven 配置文件(pom.xml)中定义依赖&…

人工智能改善客户体验的10种方式

什么是人工智能客户体验? 人工智能客户体验是指使用人工智能技术(如机器学习、聊天机器人和对话式用户体验)使每个接触点尽可能高效且无障碍的实践。本质上,客服代表得到了一个虚拟助手帮助他们完成重复性任务。这意味着对于有简…

期权(1):基本概念,权利金,定金,买方,卖方,零和游戏,对赌协议

期权是合约,权利金就是定金! 合约到期时 买方可以选择行权,也可以选择不行权。代价就是定金损失。因此亏损封顶,但盈利无限。卖方赚的就是买方的定金,盈利封顶,但亏损无限。 从这里,我们看出…

C语言例题42、打印金字塔

#include <stdio.h>void main() {int i, j;for (i 0; i < 5; i) {for (j 4; j > i; j--) {//输出空格printf(" ");}for (j 0; j < 2 * i 1; j) {//输出星号printf("* ");}printf("\n");} }运行结果&#xff1a; 本章C语言经…

HTML5实现简洁好看的个人主页,个人小站(多种风格附源码)

文章目录 1.烟灰主题个人主页1.1 个人主页界面1.2 个人信息界面1.3 兴趣爱好界面1.4 个人作品界面 2.紫霞主题个人主页2.1 个人主页界面2.2 个人信息界面2.3 兴趣爱好界面2.4 个人作品界面 3.墨夜主题个人主页3.1 个人主页界面3.2 个人信息界面3.3 兴趣爱好界面3.4 个人作品界面…

优雅谈论大模型5: RAG

RAG 众所周知&#xff0c;大模型以及一些预训练的模型在训练完毕之后会在其参数存储了大量的压缩资讯。但是这样的参数是通过固定的语料库训练而成&#xff0c;训练完毕之后这个模型已经固定了。然而外部资讯瞬息万变&#xff0c;加上大模型本质上为一种概率模型&#xff0c;所…

Nginx读书笔记

Nginx 是高性能的 HTTP 和反向代理的web服务器

ffmpeg使用xfade的转场特效

ffmpeg使用xfade的转场特效 1. 介绍2. ffmpeg里面的xfade3. 使用 1. 介绍 参考文档 ffmpeg是一个音视频编辑工具&#xff0c;具体的。。。。我才搞接触&#xff0c;所以不懂。 xfade是一种视频转场滤镜&#xff0c;用于在两个视频片段之间创建平滑的过渡效果。xfade的转场效果…

软件测试有哪些常用的测试方法?

&#x1f345; 视频学习&#xff1a;文末有免费的配套视频可观看 &#x1f345; 点击文末小卡片 &#xff0c;免费获取软件测试全套资料&#xff0c;资料在手&#xff0c;涨薪更快 软件测试是软件开发过程中重要组成部分&#xff0c;是用来确认一个程序的质量或者性能是否符合开…