Jetpack:012-Jetpack中的弹出菜单

news2024/11/16 10:42:51

文章目录

  • 1. 概念介绍
  • 2. 使用方法
    • 2.1 DropdownMenu
    • 2.2 DropdownMenuItem
  • 3. 示例代码
    • 3.1 代码和注释
    • 3.2 代码难点
    • 3.3 运行效果
  • 4. 内容总结

我们在上一章回中介绍了Jetpack中标题栏相关的内容,本章回中主要 弹出菜单。闲话休提,让我们一起Talk Android Jetpack吧!

1. 概念介绍

我们在本章回中介绍的弹出菜单主要指标题栏右侧的详情菜单,平常不显示,当点击详情图标时才会弹出菜单。在Android的View体系中叫它PopupMenu组件。在Jectpack库中叫DropdownMenu。虽然名字不同,但是显示的效果相同,为了方便介绍,我统一称它们为弹出菜单。

2. 使用方法

弹出菜单通过DropdownMenuDropdownMenuItem这两个可组合函数一起实现,接下来我们分别介绍这两个函数的使用方法。

2.1 DropdownMenu

该函数主要用来显示弹出菜单,它提供了一些参数来控制菜单,下面是常用的参数:

  • expanded参数:主要用来控制是否显示菜单,值为true时显示菜单,否则不显示菜单;
  • offset参数:主要用来控制菜单弹出的位置,默认在action图标左下角显示弹出菜单;
  • onDismissRequest参数:点击菜单外任意位置时是否关闭菜单,值为true时关闭菜单,否则不关闭菜单;

2.2 DropdownMenuItem

该函数主要用来控制弹出菜单中的菜单项,它提供了相关的参数来控制菜单项,下面是常用的参数:

  • text:主要用来控制菜单项显示的文本内容;
  • onClick:主要用来控制菜单项的点击事件;
  • leadingIcon:主用用来控制菜单项的图标,位于菜单项最左侧;
  • trailingIcon:主用用来控制菜单项的图标,位于菜单项最右侧;
  • colors:主要用来控制菜单项中的文本,图标,背景等内容的颜色;

3. 示例代码

介绍完实现弹出菜单的可组合函数后,我们将通过具体的代码来演示这些函数的用法,下面是示例代码,请大家参考:

3.1 代码和注释

//自定义的popupMenu,通过可以组合函数DropdownMenu实现,同时实现了点击功能,不过没有给item添加具体的功能
@Composable
fun ShowPopupMenu() {
    //是否显示popupMenu,默认显示
    var show by remember { mutableStateOf(true) }

    //菜单中显示的内容:包含图标和文字
    val items = listOf<NavigationItem>(
        NavigationItem("One",Icons.Default.Done),
        NavigationItem("Two",Icons.Default.Done),
        NavigationItem("Three",Icons.Default.Done),
    )

    if (show)
        DropdownMenu(
            //是否显示菜单
            expanded = show,
            //控制菜单的弹出位置,向左和向下进行偏移
            offset = DpOffset(x = 20.dp, y = 30.dp),
            //点击菜单外任意位置时,菜单消失
            onDismissRequest = { show = false }) {
            Column() {
                items.forEachIndexed { index, item ->
                    //这个菜单项目比较好,封装了图标、文本和点击事件
                        DropdownMenuItem(
                            leadingIcon = { Icon(imageVector = item.icon, contentDescription = null)},
                            text = { Text(text = item.text) },
                            //点击任意菜单项目时,菜单消失
                            onClick = { show = false})
                }
            }
        }
    else
        //action第二次点击弹出菜单,第一次点击在scaffold中控制
        IconButton(onClick = { show = true}) {
            Icon(imageVector = Icons.Default.MoreVert, contentDescription = null)
        }
}

我们在上面代码中的关键位置都添加了注释,这样方便大家理解代码。此外,我们把代码封装成了列表,通过列表来添加菜单项目,这样可以让代码更加简洁一些。

3.2 代码难点

示例代码中的难点在于如何显示和关闭弹出菜单,我们的思路是定义一个状态值,然后依据不同的状态值来显示和关闭弹出菜单,也就是代码中if/else语句控制的内容。
修改状态值的地方有两个:一个是弹出菜单的菜单项,另外一个是详情菜单图标的点击事件,也就是代码中onClick参数对应的内容。

状态值在代码中对应为show变量,它通过remember进行状态管理,状态值发生变化后,系统会重组UI界面,进而实现显示和关闭弹出菜单的功能。状态管理的内容,我们将在后面章回中介绍。

3.3 运行效果

我们把弹出菜单封装成了独立的函数,编译并且运行后可以得到下面的运行效果
在这里插入图片描述

4. 内容总结

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

  • 弹出菜单位于标题栏最右侧,平常不显示,点击详情菜单图标时弹出菜单;
  • 弹出菜单通过可组合函数DropdownMenu和DropdownMenuItem实现;
  • 可组合函数DropdownMenu主要控制弹出菜单显示状态和位置相关的内容;
  • 可组合函数DropdownMenuItem主要控制弹出菜单中菜单项目的具体内容;
  • 关闭和显示弹出菜单通过状态值来控制,涉及到修改状态值和状态管理的知识;

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

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

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

相关文章

Appium+python+unittest搭建UI自动化框架!

阅读本小节&#xff0c;需要读者具备如下前提条件&#xff1a; 1. 掌握一种编程语言基础&#xff0c;如java、python等。 2. 掌握一种单元测试框架&#xff0c;如java语言的testng框架、python的unittest框架。 3. 掌握目前主流的UI测试框架&#xff0c;移动端APP测试框架Appiu…

智能化巡检系统哪家好?巡检系统可以为企业单位带来什么便利?

设备点检是设备维修策略中预防维修的一个重要手段。在很多单位内也得到了广泛的应用&#xff0c;但是实施效果均不太理想&#xff0c;弄虚作假的情况时常存在。尽管现在是人手一机的时代&#xff0c;但仍然有不少企业以纸笔抄录作为点检模式&#xff0c;这样就容易存在一系列的…

HarmonyOS/OpenHarmony原生应用-ArkTS万能卡片组件Slider

滑动条组件&#xff0c;通常用于快速调节设置值&#xff0c;如音量调节、亮度调节等应用场景。该组件从API Version 7开始支持。无子组件 一、接口 Slider(options?: {value?: number, min?: number, max?: number, step?: number, style?: SliderStyle, direction?: Ax…

如何确定IP地址的具体位置?

IP地址通过几种方法帮助确定具体位置&#xff0c;尽管它们的准确性和精度因不同的情况而异。以下是几种确定具体位置的主要方法&#xff1a; 地理IP数据库&#xff1a;这是最常用的方法之一&#xff0c;它使用IP地址和地理位置数据的映射来确定用户的位置。这些数据库存储了大量…

节省工时超 1500人/天,国泰基金探索金融业人机协同新业态

“十四五”时期是我国经济实现从高速增长转变为高质量发展的关键历史时期&#xff0c;“十四五”规划向金融行业提出了数字化转型与科技监管的新要求。在新一轮科技革命和产业变革趋势下&#xff0c;新一代信息技术与金融行业融合加速&#xff0c;金融行业面临着监管要求与自身…

coreldraw2018零售版最新下载步骤

安装前一定要先退出杀毒软件&#xff1a;360杀毒、360安全卫士、腾讯管家等。 第一步&#xff1a;打开安装包 CorelDRAW2018版win下载如下:https://wm.makeding.com/iclk/?zoneid55678 CorelDRAW2018版mac下载如下:https://wm.makeding.com/iclk/?zoneid55679 第二步&…

AutoSAR入门:开发工具链介绍

1、AutoSAR愿景/目标 AutoSAR的目标&#xff0c;旨在进行嵌入式软件的标准化。 2、AutoSAR在BMS中的应用 国外公司BMS 做的比较好的有联电、大陆、德尔福、AVL 和FEV 等等&#xff0c; 现在基本上都是按照AUTOSAR架构以及ISO26262功能安全的要求来做&#xff0c;软件功能更多&…

Flutter笔记:发布一个Flutter头像模块 easy_avatar

Flutter笔记 发布一个头像Flutter模块 easy_avatar 作者&#xff1a;李俊才 &#xff08;jcLee95&#xff09;&#xff1a;https://blog.csdn.net/qq_28550263 邮箱 &#xff1a;291148484163.com 本文地址&#xff1a;https://blog.csdn.net/qq_28550263/article/details/1339…

Stable Diffusion WebUI几种解决手崩溃的方法

1. 添加与手相关负面提示词 如何提价提示词呢? 首先有一个embeddings模型文件bad-hands-5,我们可以去各个大模型网站去搜,我是在C站上面下载的。 附上C站地址:https://civitai.com/ 下载好之后,你需要将文件放入stable-diffusion-webui\embeddings目录中。位置如下所示…

【Linux-常用命令-基础命令-解压rar文件-unrar-x-命令-笔记】

【Linux-常用命令-基础命令-解压rar文件-unrar-x-命令-笔记】 1、前言2、操作3、自己的操作 1、前言 最近&#xff0c;在使用Linux的时&#xff0c;使用相关基础命令是&#xff0c;总是容易忘记&#xff0c;上网一搜&#xff0c;大部分都写的比较繁琐&#xff0c;解压不同文件…

执法记录仪主板_基于MTK6877联发科5G主板方案

4G/5G智能执法记录仪是一种集成了先进的人工智能和传感器技术的设备&#xff0c;不仅可以记录事件发生的过程&#xff0c;还能够辅助工作人员进行人车识别、安全预警。这种记录仪使用联发科MT6877芯片作为主板方案&#xff0c;该芯片采用了6纳米工艺制程&#xff0c;拥有八核CP…

揭秘108个CMD命令,让你成为计算机大神

今天整理了一些cmd命令 &#x1f449;操作方法&#xff1a;快捷键winR&#xff0c;输入cmd回车&#xff0c;然后就可以输入cmd命令了&#xff0c;赶紧收藏起来&#xff0c;用的时候更方便 想了解更多网工知识&#xff0c;获取《网工大礼包》&#xff0c;可关注公众号&…

PTE-精听学习(二)

目录 时间分配 消音题可以帮忙 节约时间的 剩余9个题目一定要剩余出10分钟以上 MSA 单选题看时间 评分标准 ​编辑 SMW 单词长 空挡 会早一点 单词短 beep短 会晚一点 做题方法 1.先猜 2.不准记笔记 3.搭配 HIW 大分题不是小分题 评分标准 3-6个是比较常见…

zabbix-proxy代理服务器配置

下载zabbix源 rpm -Uvh https://repo.zabbix.com/zabbix/5.0/rhel/7/x86_64/zabbix-release-5.0-1.el7.noarch.rpm 安装 yum -y install zabbix-proxy-mysql zabbix_get 查看相关文件路径 rpm -ql zabbix-proxy-mysql 创建数据库 mysq -uroot -proot mysql> create database…

Kubeadm部署k8s集群

目录 主机准备 主机配置 修改主机名&#xff08;三个节点分别执行&#xff09; 配置hosts&#xff08;所有节点&#xff09; 关闭防火墙、selinux、swap、dnsmasq(所有节点) 安装依赖包&#xff08;所有节点&#xff09; 系统参数设置(所有节点) 时间同步(所有节点) 配…

vite中配置 https 安全超文本网络协议

vite中配置 https 安全超文本网络协议 1、本地模拟生成证书2、安装证书3、vite 中使用插件支持 https 协议 前言&#xff1a; https 的配置是相对安全的&#xff0c;但是需要购买证书&#xff0c;它是 SSL/TLS HTTP 的安全超文本网络协议 此版本配置的是在 vite 开发服务器上临…

uni-table多选获取当前行数据 - - -亲测有效

废话不多说&#xff0c;直接上代码 因为全选的时候,只能返回当前的索引,所有要处理一下 代码如下: selectionChange(e) {let arrList [] // 选择的行数据let selectedIndexs [] // 选择的下标数组selectedIndexs e.detail.index// 将数组中的值&#xff0c;作为table表格数…

ArGIS Engine专题(13)之矢量要素图层符号化(单一符号化渲染)

一、结果预览 二、简介 要素符号化是指为地理要素(如点、线、面等)设置视觉表示样式的过程。通过符号化,可以将地理要素以不同的颜色、大小、形状、填充等方式呈现,以便更好地表达地理数据的含义和特征。 本文主要实现了四大类要素符号化方式,包括单一符号化渲染、唯一值渲…

Linux上如何部署SpringBoot项目——手把手教会你

目录 前言 1、准备操作 1.1、Linux上安装jdk 1.2、准备MySQL数据库 1.3、打开云服务器的防火墙 1.4、准备jar包 2、部署 前言 下面是教你部署SpringBoot项目&#xff0c;jar包形式的&#xff0c;不是war包&#xff01;&#xff01;&#xff01; 1、准备操作 1.1、Linux…

【网络安全】防火墙技术

防火墙是网络安全防御的重要组成部分&#xff0c;它的主要任务是阻止或限制不安全的网络通信。在这篇文章中&#xff0c;我们将详细介绍防火墙的工作原理&#xff0c;类型以及如何配置和使用防火墙。我们将尽可能使用简单的语言和实例&#xff0c;以便于初学者理解。 如果你对…