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…

CTP电池托盘市场调研报告-主要企业、市场规模、份额及发展趋势

CTP电池托盘市场报告主要研究: CTP电池托盘市场规模: 产能、产量、销售、产值、价格、成本、利润等 CTP电池托盘行业竞争分析:原材料、市场应用、产品种类、市场需求、市场供给,下游市场分析、供应链分析、主要企业情况、市场份…

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

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

KeyValuePair和Dictionary和Tuple区别和应用

在C#中,Tuple 和 Dictionary 是两种不同的数据结构,它们各自有不同的用途和特性。以下是它们之间的主要区别: Tuple(元组) 定义:Tuple 是一个包含多个元素(这些元素可以是不同类型的&#xff0…

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

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

卷积神经网络的理解

1. 神经网络主要分为5层,输入层,卷积层,池化层,全连接层和输出层 输入层,输入图像 卷积层,图片与卷积核的内积,得到一个特征图(局部图), 激活层&#xff0…

KEBA科霸注塑机电脑维修KEMRO K2-700工业CNC控制器主机CPU主板

类别: 触摸屏液晶显示器 制造商: KEBA制造商部件号:K2-700系列:KEMRO K2-200 PLC也称为(AKA):深圳捷达工控维修是您工业维修的最佳来源。 我们可以在我们的工厂维修您的 KEBA 型号 K2-700。让我…

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

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

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

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

操作系统整理(一)

目录 一、引言 二、操作系统 ------>2.1、整体介绍 ------------>2.1.1、kernel主要组件 ------------>2.1.2、内核版本 ------------>2.1.3、qemu 搭建kernel调试环境 ------>2.2、linux启动流程 三、五大子系统介绍 四、IO机制原理与系统总线 -----…

MySQL数据库--分组与统计

目录 1.统计函数 1.1COUNT()函数 1.2SUM()函数 1.3AVG()函数 1.4MAX()函数 1.5MIN()函数 2.分组查询 2.1单独使用GROUP BY分组查询 2.2使用GROUP BY分组和统计函数一起查询 2.3HAVING限制分组查询结果 欢迎 1.统计函数 …

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

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

Vue3选项式和组合式生命周期说明

生命周期:composition 生命周期先后顺序为: setup -beforeCreate和created的统称,只在composition里面取消这两个,可以在这里进行数据请求 onBeforeMount-挂载前,可以请求后台数据 onMounted-挂载,可以…