Jetpack:016-Jetpack中的SanckBar

news2024/9/27 17:35:26

文章目录

  • 1. 概念介绍
  • 2. 使用方法
    • 2.1 显示内容
    • 2.2 显示方法
  • 3. 示例代码
  • 4. 内容总结

我们在上一章回中介绍了Jetpack相关的概念和主要内容,本章回中主要介绍 SnackBar。闲话休提,让我们一起Talk Android Jetpack吧!

1. 概念介绍

我们在本章回中介绍的SnackBar是指在页面底部显示小窗口,它类似早期的Toast,主要用来发出提示消息,显示一段时间后会自动消失,它属于Scaffold中的一部分内容,可以填充到Scaffold提供的槽位中,前面介绍Scaffold时提到过它,只是没有介绍,本章回中将详细介绍它的使用方法。

2. 使用方法

2.1 显示内容

显示内容是指SnackBar自身,使用SnackBar可组合函数可以控制,下面是该函数中常用的参数。

  • contentColor参数:主要用来控制窗口中内容的颜色
  • containerColor参数:主要用来控制窗口中背景的颜色;
  • action参数:主要用来控制Action图标,默认在窗口最右侧显示一个X图标;
  • conten参数:主要用来控制窗口中显示的内容,它可以组合多个可组合函数;

上面介绍的这几个参数中content参数比较特殊,它是SnackBar函数的最后一个参数,按照尾lambda的语法,可以把该参数的内容移动到函数体内,因此我们可以在该函数体内添加窗口中需要显示的内容。

2.2 显示方法

显示方法是指显示SnackBar的方法,使用showSnackBar函数可以显示SnackBar,下面是该函数中常用的参数:

  • message参数:主要用来SnackBar窗口中的内容;
  • actionLabel参数:主要用来显示Action的名称,位于Action图标左侧;
  • withDismissAction参数:用来控制是否显示Action图标,默认图标是一个X;
  • duration参数:主要用来控制窗口的显示时间,时间值是枚举,分长,短和永久三种时间;

只有showSnackBar方法还不能显示SnackBar,还需要配合SnackbarHost以及snackbarHostState才能显示SnackBar.整体的显示步骤如下:

  • 通过SnackbarHost给Scaffold的snackbarHost槽位赋值;
  • SnackbarHost会包含snackbarHostState和SnackBar;
  • 通过showSnackBar函数来显示SnacbarHost中的SnackBar;

3. 示例代码

//显示SnackBar时使用
val scope = rememberCoroutineScope()
val snackbarHostState = remember { SnackbarHostState() }
//在scafolld的槽位中添加snackbar
snackbarHost = { SnackbarHost(hostState = snackbarHostState) {
        snackbarData ->
        CusSnackBar(snackbarData = snackbarData)
} }

//通过SnackbarHostState的showSnackbar方法显示SnackBar
@SuppressLint("CoroutineCreationDuringComposition")
fun showSnackBar(snackbarHostState: SnackbarHostState, scope:CoroutineScope) {

   scope.launch {
       val result = snackbarHostState.showSnackbar(
           message = "content of SnackBar",
//           actionLabel = "action",
           withDismissAction = true,
           duration = SnackbarDuration.Short)

       when(result) {
           SnackbarResult.ActionPerformed -> {
           }

           SnackbarResult.Dismissed -> {
           }
       }

   }
}

//自定义的SnackBar,默认是黑色的背景的窗口,使用该内容后会可覆盖掉showSnackBar中的参数
@Composable
fun CusSnackBar(snackbarData: SnackbarData) {
    Snackbar(
        modifier = Modifier
            .padding(horizontal = 16.dp)
            .clip(CircleShape), //可以剪裁成椭圆形
        //窗口中内容的颜色
        contentColor = Color.White,
        //窗口中背景的颜色,这个颜色接近默认的背景颜色
        containerColor = Color.DarkGray,
        //默认是一个X图标,在窗口最右侧显示
        action = { Icon(imageVector = Icons.Default.Edit, contentDescription = null)},
    ) {
        Column {
            Text(text = "this is the 1 content of snackBar")
            Text(text = "this is the 2 content of snackBar")
            Text(text = "this is the 3 content of snackBar")
        }
    }
}

上面的示例代码中,把显示内容和显示方法封装成了独立的函数,显示方法可以赋值给Button的onClick参数,这样在点击Button时就可以显示SnackBar,我们在实际代码中把它赋值给了FloatingActionBar。下面是程序的运行效果图,请大家参考
在这里插入图片描述

4. 内容总结

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

  • SnackBar主要用来创建窗口以及窗口中的内容;
  • SnackbarHost相当于窗口的容器,主要用来管理窗口;
  • showSnackBar方法主要用来显示窗口中,需要提前获取snackbarHostState;
  • 如果不在SnackbarHost中添加窗口,就会使用默认的窗口,默认窗口中的信息通过showSanckBar配置;

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

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

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

相关文章

【J-Long Group Limited】申请1500万美元纳斯达克IPO上市

来源:猛兽财经 作者:猛兽财经 猛兽财经获悉,总部位于中国香港的J-Long Group Limited(简称:J-Long)近期已向美国证券交易委员会(SEC)提交招股书,申请在纳斯达克IPO上市&…

C语言 每日一题 PTA 10.21-10.24日 day3

1.计算分段函数[1] 本题目要求计算下列分段函数f(x)的值: yf(x)1/x x!0 yf(x)0 x0 int main() {double num 0;scanf("%lf", &num);double result 0;if (num 0){result 0;}else{result 1 / num;}printf("f(%.1lf)%.1lf", num, result)…

获取Android签名文件的MD5和SHA1指纹

以前在App中集成百度地图时,需要在百度地图的开发者网站上绑定应用的包名和签名,以预防自己的key被别人乱用。 最近公司的一个球机产品也搞了类似的做法,我们要访问它的摄像头功能需要使用厂家提供的aar库,但是你要想正常调用它的…

Unity性能优化一本通

文章目录 关于Unity性能优化一、资源部分:1、图片1.1、 图片尺寸越小越好1.2、使用2N次幂大小1.3、取消勾选Read/Write Enabled1.4、图片压缩1.5、禁用多余的Mip Map1.6、合并图集 2、模型2.1.限制模型面数2.2.限制贴图的大小2.3.禁用Read/Write Enables2.4.不勾选其…

阻塞队列BlockingQueue实战及其原理分析

一,队列 1. 队列 是限定在一端进行插入,另一端进行删除的特殊线性表。 允许出队的一端称为队头,允许入队的一端称为队尾。 先进先出(FIFO)线性表。 1.1 Queue接口 2. 阻塞队列(BlockingQueue) 阻塞队列 (BlockingQueu…

Linux系统64位ATT系统调用汇编指令syscall

相关概念 在Linux中syscall是系统调用(英文:system call)的指令。 想要深入了解syscall的作用,就需要了解特权级别。 现代计算机通常采用名为保护环(Protection Rings)的机制来保护整个系统的数据和功能&a…

出海 SaaS 企业增长修炼手册2:Kyligence 落地 PLG 是如何避坑的?

在第一篇文章(点击阅读 👉 出海 SaaS 企业增长修炼手册:聊聊 PLG 的关键指标、技术栈和挑战)中,我们分享了 SaaS 企业在落地 PLG 战略中可能遇到的挑战以及相应的解决方案,今天我们将从 Kyligence 亲身实践…

【数据结构】数组和字符串(二):特殊矩阵的压缩存储:对角矩阵——一维数组

文章目录 4.2.1 矩阵的数组表示4.2.2 特殊矩阵的压缩存储a. 对角矩阵的压缩存储结构体初始化元素设置元素获取打印矩阵主函数输出结果代码整合 4.2.1 矩阵的数组表示 【数据结构】数组和字符串(一):矩阵的数组表示 4.2.2 特殊矩阵的压缩存储…

Qt之普通项目如何生成DLL(含源码+注释)

文章目录 一、示例图二、普通项目需要改造的内容三、源码(创建了一个TestDLL的项目,更改内容主要在pro文件和maindow.h文件)TestDLL.promainwindow.hmainwindow.cppmainwindow.ui 总结 一、示例图 使用不同的编译模式编译,会在对…

卷积神经网络的感受野

经典目标检测和最新目标跟踪都用到了RPN(region proposal network),锚框(anchor)是RPN的基础,感受野(receptive field, RF)是anchor的基础。本文介绍感受野及其计算方法,和有效感受野概念。 1.感受野概念 在典型CNN结构中,FC层(…

一款集成了主流大语言模型以及绘图模型的 APP, 采用 Flutter 开发,代码完全开源!!

一款集成了主流大语言模型以及绘图模型的 APP, 采用 Flutter 开发,代码完全开源,支持以下功能: 支持 OpenAI 的 GPT-3.5,GPT-4 大语言模型支持 Anthropic 的 Claude instant,Claude 2.0 大语言模型支持国产…

Python 框架学习 Django篇 (六) 数据表关联、ORM关联

在后端服务器开发中,特别是前后端分离的架构中数据库是非常重要的,后端主要就是负责管理数据,而我们经常使用的mysql、oracle 都是关系型数据库,什么是关系型数据库?就是建立在关系模型基础上的数据库,而最…

竞赛 深度学习人体跌倒检测 -yolo 机器视觉 opencv python

0 前言 🔥 优质竞赛项目系列,今天要分享的是 🚩 **基于深度学习的人体跌倒检测算法研究与实现 ** 该项目较为新颖,适合作为竞赛课题方向,学长非常推荐! 🥇学长这里给一个题目综合评分(每项满…

flutter 使用FlutterJsonBeanFactory工具遇到的问题

如下图,使用FlutterJsonBeanFactory工具生成的数据类 但是其中 生成的 import package:null/,导致的错误:Target of URI doesn’t exist: ‘package:null/generated/json/asd.g.dart’ 尝试过的方法: 手动添加包名,…

面试算法39:直方图最大矩形面积

题目 直方图是由排列在同一基线上的相邻柱子组成的图形。输入一个由非负数组成的数组,数组中的数字是直方图中柱子的高。求直方图中最大矩形面积。假设直方图中柱子的宽都为1。例如,输入数组[3,2,5,4,6&am…

前后端交互系统:在Node.js中运行JavaScript

在Node.js中运行JavaScript,您需要编写适用于服务器端的代码,而不是浏览器端的代码。以下是一些示例代码,用于在Node.js中创建一个简单的HTTP服务器并在浏览器中访问它: // 引入Node.js内置的http模块 const http require(http);…

华为ERP,包含哪些内容?技术的先进性体现在哪里?

华为作为全球领先的信息和通信技术(ICT)解决方案提供商,其企业资源规划(ERP)系统是一个高度复杂且集成的管理软件平台,用于优化公司内部的业务流程和资源分配。华为ERP系统包括一系列模块和功能&#xff0c…

pytest-yaml 测试平台-2.支持上传YAML格式用例

前言 pytest-yaml 测试平台用例结构是遵循pytest-yaml-yoyo 框架用例规则。 如果你之前已经有用 pytest-yaml-yoyo 框架完成了yaml 用例的编写,可以直接在平台上导入yaml 用例。 yaml 用例 test_用例文件a.yml config:name: 单个用例文件test_a:name: extract提…

Linux多线程服务端编程:使用muduo C++网络库 学习笔记 第三章 多线程服务器的适用场合与常用编程模型

本文中的多线程服务器指运行在Linux上的独占式网络应用程序。硬件平台为Intel x86-64系列的多核CPU,单路或双路SMP(Symmetric Multi-Processing,对称多处理,它是一种多核处理器架构,其中多个CPU核心共享系统的内存和其…

(三)行为模式:10、策略模式(Strategy Pattern)(C++示例)

目录 1、策略模式(Strategy Pattern)含义 2、策略模式的UML图学习 3、策略模式的应用场景 4、策略模式的优缺点 (1)优点: (2)缺点 5、C实现策略模式的实例 6、策略模式解析 1、策略模式…