Compose UI 之 MediumLarge TopAppBar

Medium&Large TopAppBar

前面文章介绍了 Small 类型的 TopAppBarTopAppBar CenterAlignedTopAppBar 。下来介绍 Medium 和 Large 类型的 TopAppBarMediumTopAppBar LargeTopAppBar

MediumTopAppBar

上面介绍了Small 类型的 TopAppBar (TopAppBar CenterAlignedTopAppBar),这里再介绍一个 MediumTopAppBar

MediumTopAppBar的特点

  • 适中的高度MediumTopAppBar 相较于传统的 TopAppBar 拥有适中的高度,这既保证了足够的空间来展示应用标题、图标和其他关键信息,又避免了因过高而占用过多屏幕空间的问题。

  • 灵活的布局MediumTopAppBar 支持自定义布局,开发者可以根据需求添加导航图标、标题、操作项等元素,并调整它们的位置和样式。

  • 响应式设计MediumTopAppBar 能够根据设备的屏幕尺寸和方向自动调整其布局和大小,确保在不同设备上都能呈现出良好的视觉效果。

使用场景分析

MediumTopAppBar 适用于那些需要展示更多信息或进行复杂操作的应用场景。例如,在新闻阅读应用中,可以使用 MediumTopAppBar 来展示新闻标题、搜索栏和分类按钮,以便用户能够更方便地浏览和筛选内容。

动画效果

MediumTopAppBar 支持多种动画效果,这些效果可以极大地提升用户体验。例如,当用户滚动页面时,MediumTopAppBar 可以逐渐隐藏或显示,这种滚动动画效果可以使得界面更加流畅和自然。此外,MediumTopAppBar 还可以与页面的其他元素进行联动,实现更复杂的动画效果。

MediumTopAppBar 声明及参数

MediumTopAppBar 的声明如下。

@Composable
fun MediumTopAppBar(title: @Composable () -> Unit,modifier: Modifier = Modifier,navigationIcon: @Composable () -> Unit = {},actions: @Composable RowScope.() -> Unit = {},windowInsets: WindowInsets = TopAppBarDefaults.windowInsets,colors: TopAppBarColors = TopAppBarDefaults.mediumTopAppBarColors(),scrollBehavior: TopAppBarScrollBehavior? = null
): Unit

对于 MediumTopAppBar 的参数说明如下表。

参数名类型描述
title@Composable () -> Unit是应用栏的标题部分,通常显示页面相关的标题。它是一个标注 @Composable 的 lambda 表达式,你可以在其中放置任何你想要作为标题显示的 UI 元素,通常是一个 Text 组件。
modifierModifier用于更改或增强 TopAppBar 的行为。例如,你可以使用 Modifier.height() 来设置应用栏的高度。
navigationIcon@Composable () -> Unit是一个可选的导航图标,通常用于显示一个返回按钮或菜单图标。和 title 一样,这也是一个标注 @Composable 的 lambda 表达式。
actions@Composable RowScope.() -> Unit用于在应用栏的右侧放置操作按钮或图标。开发者可以在这里添加多个按钮,它们将水平排列(因为 RowScope 表示一个水平行布局的范围)。
windowInsetsWindowInsets定义了应用栏如何处理窗口插入,如状态栏、导航栏等。
colorsTopAppBarColors用于定义应用栏的颜色方案。TopAppBarColors 是一个包含多个颜色属性的对象,如背景色、标题色等。TopAppBarDefaults.mediumTopAppBarColors() 提供了默认的颜色设置。
scrollBehaviorTopAppBarScrollBehavior?当页面内容可以滚动时,scrollBehavior 定义了应用栏如何响应滚动事件。例如,应用栏可以在页面向下滚动时隐藏,并在页面向上滚动时重新显示。

MediumTopAppBar 的样式及使用示例

MediumTopAppBar 运行后显示的样式,标题在其他的图标下面。

MediumTopAppBar

示例及运行动态效果如下。

@Composable
fun ComponentDemoMain() {val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()Scaffold(modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),topBar = {MediumTopAppBar(title = {Text("MediumTopAppBar 标题",maxLines = 1,overflow = TextOverflow.Ellipsis)},navigationIcon = {IconButton(onClick = {}) {Icon(imageVector = Icons.Filled.Menu,contentDescription = "")}},actions = {IconButton(onClick = {}) {Icon(imageVector = Icons.Filled.Edit,contentDescription = "")}},scrollBehavior = scrollBehavior,)},content = { innerPadding ->LazyColumn(modifier = Modifier.background(color = Color.LightGray),contentPadding = innerPadding,verticalArrangement = Arrangement.spacedBy(8.dp)) {val list = (0..75).map { it.toString() }items(count = list.size) {Text(text = "列表 item ${list[it]}",style = MaterialTheme.typography.bodyLarge,modifier = Modifier.fillMaxWidth().background(color = Color.White).padding(horizontal = 16.dp, vertical = 10.dp),fontSize = 18.sp)}}})
}

gif_MediumTopAppBar

从运行的图上可以看出,MediumTopAppBar 与主界面内 LazyColumn 有个联动的效果。这与 TopAppBar CenterAlignedTopAppBar 有明显区别。

MediumTopAppBarTopAppBar CenterAlignedTopAppBar 的区别

  1. 高度与外观
    • TopAppBar 通常具有标准的高度,适合简洁快速的UI交互。
    • CenterAlignedTopAppBar 的特点是标题居中,适合需要突出标题的场景。
    • MediumTopAppBar 则在高度上介于两者之间,提供了更多的空间来展示内容,同时保持了优雅的外观。
  2. 使用场景
    • TopAppBar 适用于大部分常规应用,特别是那些不需要额外空间来展示额外信息的场景。
    • CenterAlignedTopAppBar 更适合在标题内容重要且需要强调的场景中使用。
    • MediumTopAppBar 则适用于需要更多空间来放置图标、文本或其他操作项的场景,特别是那些强调内容展示和交互的应用。
  3. 动画效果
    • 所有这三种 TopAppBar 变体都支持动画效果,但具体实现和效果可能会因组件的特性和使用场景的不同而有所差异。

LargeTopAppBar

LargeTopAppBar 是 Android Compose 库中的一个重要组件,它主要用于在应用的顶部展示一个较大的应用栏(App Bar)。它通常包含应用的标题、导航图标以及其他可能的操作项,如搜索、设置等。

LargeTopAppBar 的 UI 设计特点:

  1. 尺寸较大:与普通的 TopAppBar 相比,LargeTopAppBar 在高度上更加突出,能够容纳更多的内容和更复杂的布局。这使得它在展示信息丰富的标题、副标题或图标时更加得心应手。
  2. 灵活性高:LargeTopAppBar 支持多种自定义选项,如设置标题的字体、颜色、对齐方式等,还可以添加自定义的操作项。这种灵活性使得开发者能够根据应用的整体风格和页面需求来定制独特的顶部应用栏。
  3. 适配性强:LargeTopAppBar 能够很好地适应不同的屏幕尺寸和布局需求。无论是在手机、平板还是折叠屏幕上,它都能提供一致的用户体验。
  4. 交互友好:LargeTopAppBar 的设计考虑了用户的交互习惯,提供了直观的导航和操作方式。例如,用户可以通过点击导航图标返回上一页面,或者通过点击操作项来执行特定的功能。

LargeTopAppBar 在功能上:

  1. 显示标题和副标题:LargeTopAppBar 可以显示应用的标题和副标题,帮助用户快速了解当前页面的主要内容。
  2. 导航图标:组件内置了导航图标的功能,通常用于实现返回上一页面或回到主页面的操作。
  3. 操作项支持:LargeTopAppBar 允许添加多个操作项,如搜索按钮、设置按钮等。这些操作项可以根据实际需求进行定制和布局。
  4. 滚动行为定制:当页面内容滚动时,LargeTopAppBar 可以表现出不同的行为。例如,它可以随着内容的滚动而逐渐隐藏或显示,从而提供更多的阅读空间。
  5. 主题和样式定制:开发者可以通过 Compose 的主题和样式系统来定制 LargeTopAppBar 的外观,以确保它与应用的其他部分保持视觉上的一致性。

LargeTopAppBar 可以放置标题、导航图标和动作如下图。

LargeTopAppBar

下面从 LargeTopAppBar 声明,示例及运行效果查看它的表现。

@Composable
fun LargeTopAppBar(title: @Composable () -> Unit,modifier: Modifier = Modifier,navigationIcon: @Composable () -> Unit = {},actions: @Composable RowScope.() -> Unit = {},windowInsets: WindowInsets = TopAppBarDefaults.windowInsets,colors: TopAppBarColors = TopAppBarDefaults.largeTopAppBarColors(),scrollBehavior: TopAppBarScrollBehavior? = null
): Unit

参数表

参数名类型描述
title@Composable () -> Unit用于指定应用栏的标题内容。它接收一个 Composable 函数,这意味着你可以在其中定义任意的 Compose UI 元素作为标题。这个函数不返回任何值(返回类型是 Unit),它的作用仅仅是描述 UI。
modifierModifier参数用于应用各种修改器到 LargeTopAppBar 上。这些修改器可以改变组件的布局、外观、行为等。默认情况下,这个参数是 Modifier,即没有应用任何修改器。
navigationIcon@Composable () -> Unit用于设置应用栏的导航图标。它也接收一个返回类型为 Unit 的 Composable 函数,允许你自定义导航图标的外观。默认情况下,这个参数是空的,即没有导航图标。
actions@Composable RowScope.() -> Unit参数允许你在应用栏中添加一组动作,通常是一些按钮或图标。这个参数接收一个在 RowScope 中定义的 Composable 函数,这意味着你可以在这个函数中使用 Row 相关的 API。默认情况下,这个参数是空的,即没有添加任何动作。
windowInsetsWindowInsets参数用于指定窗口内边距信息,比如状态栏的高度等。这些信息可以帮助 LargeTopAppBar 正确地适应屏幕的边缘。默认情况下,这个参数使用 TopAppBarDefaults.windowInsets,这是系统定义的默认值。
colorsTopAppBarColors参数用于设置应用栏的颜色。它接收一个 TopAppBarColors 对象,其中包含各种颜色的定义。默认情况下,这个参数使用 TopAppBarDefaults.largeTopAppBarColors(),即 Material Design 规范中的默认颜色设置。
scrollBehaviorTopAppBarScrollBehavior?参数用于指定当内容滚动时应用栏的行为。例如,它可以控制应用栏是否随着内容滚动而隐藏或显示。这个参数的类型是 TopAppBarScrollBehavior?,它是一个可选参数,默认情况下是 null,表示没有指定滚动行为。

示例代码:

@Composable
fun LargeTopAppBarSample() {val scrollBehavior = TopAppBarDefaults.exitUntilCollapsedScrollBehavior()Scaffold(modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),topBar = {LargeTopAppBar(title = {Text(text = "LargeTopAppBar 标题",maxLines = 2,overflow = TextOverflow.Ellipsis,)},navigationIcon = {IconButton(onClick = {}) {Icon(imageVector = Icons.Filled.Home,contentDescription = "")}},actions = {IconButton(onClick = {}) {Icon(imageVector = Icons.Filled.Settings,contentDescription = "")}},scrollBehavior = scrollBehavior,)},content = { innerPadding ->LazyColumn(modifier = Modifier.background(color = Color.LightGray),contentPadding = innerPadding,verticalArrangement = Arrangement.spacedBy(8.dp)) {val list = (0..75).map { it.toString() }items(count = list.size) {Text(text = "列表 item ${list[it]}",style = MaterialTheme.typography.bodyLarge,modifier = Modifier.fillMaxWidth().background(color = Color.White).padding(horizontal = 16.dp, vertical = 10.dp),fontSize = 18.sp)}}})
}

运行上述示例代码后的效果如下图,开始的 title 显示在 TopAppBar 的其他图标下方,当随着内容滚动后,标题逐步显示到与图标同一行。

LargeTopAppBar-title

如果标题内容很长,超过一行所能显示的内容宽度时,可以通过设置 title 参数内的组件参数,显示不同的两行效果。

将标题内容设置为 “LargeTopAppBar 是一个在 Jetpack Compose 中定义的 Composable 函数,用于创建一个尺寸较大的顶部应用栏,适用于 Material Design 风格的 Android 应用。”,这个内容超出一行可显示的范围。不同的 title 组件设置参数会产生不同的效果。

  1. 设置标题行数及超出部分的显示样式。

    Text(text = "LargeTopAppBar 是一个在 Jetpack Compose 中定义的 Composable 函数,用于创建一个尺寸较大的顶部应用栏,适用于 Material Design 风格的 Android 应用。",maxLines = 2,overflow = TextOverflow.Ellipsis,
    )
    

    title 组件改为上述组件后运行,显示效果如下图。 可见 LargeTopAppBar 显示标题内容的行数正常显示的是 2 行。

    LargeTopAppBar-twolines-title

  2. 不设置参数,将普通的 title 组件设置显示。

    Text(text = "LargeTopAppBar 是一个在 Jetpack Compose 中定义的 Composable 函数,用于创建一个尺寸较大的顶部应用栏,适用于 Material Design 风格的 Android 应用。",
    )
    

    上述 title 设置后的运行结果,及滚动页面内容后的结果如下图。
    LargeTopAppBar-twoline-title-common


LargeTopAppBar-twoline-title-common_2

上述两个图中可以看出,当 title 内容超出 2 行可显示的最多内容时,组件的内容会超出到屏幕之外,当内容向上滑动后,从右图中可以看出,显示的内容刚好是左图内容的前面 2 行。因此 LargeTopAppBartitle 最多显示 2 行内容,且当内容显示超出 2 行可以显示的最多内容时,title 表示组件内容会扩展到屏幕外。

MediumTopAppBar 和 LargeTopAppBar 的区别

功能特点:

  1. MediumTopAppBar

    • 提供了一个中等高度的应用栏设计

    • 适中的高度,使其既不会过于显眼也不会过于拥挤。

    • 适用于大多数标准应用场景,提供基本的导航和动作功能。

  2. LargeTopAppBar

    • 提供一个较大的应用栏设计,允许更多的内容和元素放置其中。

    • 提供更大的空间,可以容纳更多的内容和交互元素。

    • 适用于需要强调品牌、搜索或其他核心功能的应用场景。

    • 可能包含更复杂的交互和动画效果。

性能表现:

从性能的角度看,MediumTopAppBarLargeTopAppBar 两者之间的主要差异在于渲染复杂性和布局计算。由于 LargeTopAppBar 可能包含更多的元素和更复杂的布局,因此它可能需要更多的处理时间来测量、布局和绘制。然而现代的硬件发展很快,两者之间的这种差别几乎可以忽略不计。

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

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

相关文章

实战|环信 Vue2 uniapp Demo重构焕新!经典再升级!

项目背景 当前环信 uni-app vue2 Demo 地址升级版本 Github 地址(临时) 原版本功能实现方式较混乱,代码逻辑晦涩难懂,不利于开发者参考或复用。此实战项目在确保原项目功能保留的情况下进行完全重写并新增大量功能,以…

【C语言】指针相关知识点

什么是指针? 指针(Pointer)是编程语言中的一个对象,利用地址,它的值直接指向(points to)存在电脑存储器中另一个地方的值。由于通过地址能找到所需的变量单元,可以说,地…

Golang搭建grpc环境

简介 OS : Windows 11 Golang 版本: go1.22.0 grpc : 1.2 protobuffer: 1.28代理 没有代理国内环境下载不了库七牛CDN (试过可用) go env -w GOPROXYhttps://goproxy.cn,direct阿里云代理(运行grpc时下载包出现报错 ): go env -w GOPROXYhttps://mirr…

黑马点评-异步秒杀实现

异步秒杀思路 我们来回顾一下下单流程 当用户发起请求,此时会请求nginx,nginx会访问到tomcat,而tomcat中的程序,会进行串行操作,分成如下几个步骤 1、查询优惠卷 2、判断秒杀库存是否足够 3、查询订单 4、校验是…

Axure Cloud如何给每个原型配置私有域名

需求 在原型发布之后,自动给原型生成一个独立访问的域名,类似http://u591bi.axshare.bushrose.cn,应该如何配置呢? 准备事项 已备案域名 如何备案?阿里云备案流程 已安装部署Axure Cloud 如何安装部署,请…

WordPress建站入门教程:如何创建菜单和设置前端导航菜单?

前面我们跟大家分享了WordPress如何上传安装WordPress主题,但是启用主题后前端没有看到有导航菜单,这是因为我们还没有创建菜单和设置导航菜单。 JianYue主题导航菜单和右上角菜单 今天boke112百科就继续跟大家分享WordPress站点如何创建菜单和设置前端…

Kafka入门及生产者详解

1. Kafka定义 传统定义:分布式的、基于发布/订阅模式的消息队列,主要用于大数据实时处理领域。发布/订阅模式中,发布者不会直接将消息发送给特定的订阅者,而是将发布的消息分为不同的类别,订阅者只接受感兴趣的消息。…

Linux系统Docker部署DbGate并结合内网穿透实现公网管理本地数据库

🌈个人主页: Aileen_0v0 🔥热门专栏: 华为鸿蒙系统学习|计算机网络|数据结构与算法|MySQL| ​💫个人格言:“没有罗马,那就自己创造罗马~” #mermaid-svg-66GkyG9g7oNq7tl8 {font-family:"trebuchet ms",verdana,arial,sans-serif;f…

基于yolov5的草莓成长期检测系统,可进行图像目标检测,也可进行视屏和摄像检测(pytorch框架)【python源码+UI界面+功能源码详解】

功能演示: 基于yolov5的草莓成长期检测系统,支持图像检测,视频检测和实时摄像检测功能_哔哩哔哩_bilibili (一)简介 基于yolov5的草莓成长期检测系统是在pytorch框架下实现的,成长期分为3类:…

加密与安全_使用Java代码操作RSA算法生成的密钥对

文章目录 Pre概述什么是非对称加密算法?如何工作?示例:RSA算法特点和优势ECC:另一种非对称加密算法 Code生成公钥和私钥私钥加密私钥加密私钥解密 ( 行不通 )私钥加密公钥解密公钥加密和公钥解密 (行不通)保…

字符指针变量

在指针的类型中我们知道有⼀种指针类型为字符指针 char* 1.一般使用方法如下: int main() { char ch w; char *pc &ch; *pc w; return 0; } 2.还有⼀种使⽤⽅式如下: int main() { const char* pstr "hello world."; printf("…

吴恩达深度学习笔记:深度学习引言1.1-1.5

目录 第一门课:神经网络和深度学习 (Neural Networks and Deep Learning)第一周:深度学习引言(Introduction to Deep Learning)1.1 欢迎(Welcome)1.2 什么是神经网络?(What is a Neural Network)1.3 神经网络的监督学习(Supervised Learning …

Linux系统——Haproxy高性能负载均衡软件

目录 一、Haproxy介绍 1.Haproxy定义 2.Haproxy主要特性 二、安装Haproxy 1.yum安装 2.第三方rpm包安装 3.编译安装 3.1解决Lua环境 3.2编译安装Haproxy 三、配置文件详解 1.状态页 2.日志管理 2.1定义日志到其他主机站点 3.指定进程线程个数 4.cpu亲缘性 5.多进…

【IP178G】分享一个IP178G的8口交换机电路图

前提 IP178G是一个集成度非常高的8口交换机芯片,还可以通过外部EEPROM配置交换机芯片实现一些简单的网管功能**(VLAN/端口镜像etc)**,拿来作为一个网络调试工具来使用非常方便,一个TYPE-C的USB口的线就可以供电(5V USB就可以带的了)

职场成功的秘诀:如何高效管理时间

在职场中,时间管理是一项至关重要的技能。高效的时间管理不仅能够提高工作效率,还能够帮助我们更好地平衡工作与生活,实现职场成功。本文将分享一些职场成功人士都在使用的时间管理秘诀,帮助你更好地管理时间,提升职场…

小红书brief怎么创作?品牌营销技巧

在小红书平台进行品牌传播,首先需要具备的能力,就是与达人进行沟通。那么就一定要学会写小红书brief。今天我们和大家分享一下小红书brief怎么创作?品牌营销技巧! 一、什么是小红书brief brief是工作简报的意思。小红书brief是品牌…

基于Docker搭建Maven私服仓库(Linux)详细教程

文章目录 1. 下载镜像并启动容器2. 配置Nexus3. 配置本地Maven仓库 1. 下载镜像并启动容器 下载Nexus3镜像 docker pull sonatype/nexus3查看Nexus3镜像是否下载成功 docker images创建Nexus3的挂载文件夹 mkdir /usr/local/nexus-data && chown -R 200 /usr/local…

07.axios封装实例

一.简易axios封装-获取省份列表 1. 需求:基于 Promise 和 XHR 封装 myAxios 函数,获取省份列表展示到页面 2. 核心语法: function myAxios(config) {return new Promise((resolve, reject) > {// XHR 请求// 调用成功/失败的处理程序}) …

微服务韧性工程:利用Sentinel实施有效服务容错与限流降级

目录 一、雪崩效应 二、Sentinel 服务容错 2.1 Sentinel容错思路 2.2 内部异常兼容 2.3 外部流量控制 三、Sentinel 项目搭建 四、Sentinel 工作原理 服务容错是微服务设计中一项重要原则和技术手段,主要目标是在服务出现故障、网络波动或其他不可预见的异常情况…

刷题日记——约数的个数KY3

分析 用例的0超过9个&#xff0c;需要使用long long&#xff0c;为了保险&#xff0c;我用的是unsigned long long判断约数有这样的规律&#xff1a;任何正整数a&#xff0c;如果存在约数对<m,n>&#xff0c;即amn&#xff0c;设mmin{m,n},nmax{m,n}&#xff0c;即设m是…