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 可能包含更多的元素和更复杂的布局,因此它可能需要更多的处理时间来测量、布局和绘制。然而现代的硬件发展很快,两者之间的这种差别几乎可以忽略不计。

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(二)

Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(前导) Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(一) Zynq—AD9238数据采集DDR3缓存千兆以太网发送实验(三) 五、实验目的 本次实验使用电脑上的…

贪吃蛇c++

#include<bits/stdc.h> #include<conio.h> // 用于获取按键输入using namespace std;const int width 20; const int height 20; int x, y, fruitX, fruitY, score; int tailX[100], tailY[100]; // 蛇的身体位置数组 int nTail; // 蛇的长度 enum eDirecton { S…

C# 用Trace.WriteLine输出调试信息无法查看

写程序就会遇见BUG&#xff0c;这时候在代码不同部位输出一些标记的信息对查找错误非常有必要&#xff0c;一般情况下我们都是使用Console.WriteLine()方法来打印信息到控制台窗口&#xff0c;但有时候使用Console.WriteLine()方法会存在不方便的情况&#xff0c;比如鄙人遇到的…

国际光伏展览会

国际光伏展览会是一个专注于太阳能光伏领域的国际性展览会。该展览会汇集了来自全球光伏行业的专业人士和企业&#xff0c;展示和交流最新的太阳能光伏技术、产品和解决方案。 国际光伏展览会通常展示各种类型的光伏产品&#xff0c;包括太阳能电池、太阳能电池板、太阳能光伏发…

C#,最小代价多边形三角剖分MCPT(Minimum Cost Polygon Triangulation)算法与源代码

1 最小代价多边形三角剖分算法 凸多边形的三角剖分是通过在非相邻顶点&#xff08;角点&#xff09;之间绘制对角线来形成的&#xff0c;这样对角线就不会相交。问题是如何以最小的代价找到三角剖分的代价。三角剖分的代价是其组成三角形的权重之和。每个三角形的重量是其周长…

2024年服装私域提升的三大妙招!

在服装行业&#xff0c;私域运营正逐渐成为主流。随着市场的演变&#xff0c;从传统的线下门店与线上电商并行模式&#xff0c;到如今的以小程序商城、企业微信、视频号、公众号等为核心的全渠道私域运营模式&#xff0c;行业的转型已显而易见。 而推动这种转型的关键因素&…

一些关于绩效提升策略的具体例子和数据

员工个人绩效提升策略&#xff1a; 持续学习与发展&#xff1a; 例子&#xff1a;某销售员工报名参加销售技巧提升课程&#xff0c;学习新的销售策略。 数据&#xff1a;经过三个月的学习与实践&#xff0c;该员工的销售额提升了20%。 目标设定与跟踪&#xff1a; 例子&#xf…

如何在Windows上使用Docker,搭建一款实用的个人IT工具箱It- Tools

文章目录 1. 使用Docker本地部署it-tools2. 本地访问it-tools3. 安装cpolar内网穿透4. 固定it-tools公网地址 本篇文章将介绍如何在Windows上使用Docker本地部署IT- Tools&#xff0c;并且同样可以结合cpolar实现公网访问。 在前一篇文章中我们讲解了如何在Linux中使用Docker搭…

OKLink2月安全月报| 2起典型漏洞攻击案例分析

在本月初我们发布的2024年2月安全月报中提到&#xff0c;2月全网累计造成损失约1.03亿美元。其中钓鱼诈骗事件损失占比11.76%。 OKLink提醒大家&#xff0c;在参与Web3项目时&#xff0c;应当仔细调研项目的真实性、可靠性&#xff0c;提升对钓鱼网站和风险项目的甄别能力&…

关于华为昇腾(Ascend)AI芯片,CANN计算架构,MindSpore深度学习框架,MindStudio开发工具

1、华为昇腾生态 深度学习之前的配置都是&#xff1a;NVIDIA GPU / CPU CUDA Tensorflow/PyTorch 后来老美禁止 NVIDIA 卖GPU芯片给我们&#xff0c;于是国内企业开始发力CPU和GPU硬件&#xff0c;成果丰硕&#xff0c;虽然与NVIDIA顶级GPU还有一些差距&#xff0c;但是也不…

基于Java的生活废品回收系统(Vue.js+SpringBoot)

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、研究内容三、界面展示3.1 登录注册3.2 资源类型&资源品类模块3.3 回收机构模块3.4 资源求购/出售/交易单模块3.5 客服咨询模块 四、免责说明 一、摘要 1.1 项目介绍 生活废品回收系统是可持续发展的解决方案&#xff0c;旨在鼓…

CCF-C推荐会议 ICANN‘24 3月15日截稿!瑞士阿尔卑斯山脚下探索人工神经网络前沿!

会议之眼 快讯 第33届ICANN(International Conference on Artificial Neural Networks)即国际人工神经网络会议将于 2024 年 9月17日-20日在瑞士卢加诺举行&#xff01;卢加诺坐落于瑞士阿尔卑斯山脚下。会议地点是意大利瑞士大学和瑞士南部应用科学与艺术大学的一部分&#xf…

弱电综合布线:连接现代生活的纽带

在当今信息化快速发展的时代&#xff0c;弱电网络布线作为信息传输的重要基础设施&#xff0c;其作用日益凸显。它不仅保障了数据的高效流通&#xff0c;还确保了通信的稳定性。从商业大厦到教育机构&#xff0c;从政府机关到医院急救中心&#xff0c;再到我们居住的社区&#…

在哪里能找到抖音短视频素材?推荐热门的抖音短视频素材下载资源

哎呦喂&#xff0c;小伙伴们&#xff0c;是不是在短视频的大海里划船&#xff0c;想找到那颗能让你起飞的珍珠&#xff0c;但又觉得素材难寻如针海捞针&#xff1f;别急&#xff0c;今天我就来给你们送上几个超实用的宝藏素材网站&#xff0c;让你的短视频创作不再愁素材 1&am…

支持向量机 SVM | 线性可分:软间隔模型

目录 一. 软间隔模型1. 松弛因子的解释小节 2. SVM软间隔模型总结 线性可分SVM中&#xff0c;若想找到分类的超平面&#xff0c;数据必须是线性可分的&#xff1b;但在实际情况中&#xff0c;线性数据集存在少量的异常点&#xff0c;导致SVM无法对数据集线性划分 也就是说&…

L波段光端机-L波段+CATV射频光端机工作机制及行业应用探究

L波段光端机-L波段CATV射频光端机工作机制及行业应用探究 北京海特伟业任洪卓发布于2023年3月8日 一、何为L波段光端机 L波段光端机是一种用于光通信的设备&#xff0c;其主要工作波长位于L波段&#xff0c;即40~860MHz和950~2600MHz的带宽&#xff0c;可选独立工作于950~260…

一键转发朋友圈!微信快速营销推广必备法宝!

在这个“得私域者得天下”的互联网时代&#xff0c;如何能够在微信上进行快速、高效的营销推广成为了摆在许多人面前的一道难题。 幸运的是&#xff0c;随着微信管理系统的出现&#xff0c;一键转发朋友圈的快速营销推广法宝已经变得触手可及。 首先&#xff0c;微信管理系统…

【网络连接】ping不通的常见原因+解决方案,如何在只能访问网关时诊断,并修复IP不通的问题

【网络连接】ping不通的常见原因解决方案&#xff0c;如何在只能访问网关时诊断&#xff0c;并修复IP不通的问题 写在最前面网络基础可能的问题、表现以及解决方案如何诊断和解决操作步骤 详细问题描述详细解决方案1. 防火墙或安全软件拦截2. IP配置错误3. 网络设备问题4. 物理…

ArcGIS筛选工具:19段SQL示例代码,所有需求一网打尽

一、使用方法 筛选工具(Select_analysis)主要用于从输入要素类或输入要素图层中提取要素&#xff08;通常使用选择或结构化查询语言 (SQL) 表达式&#xff09;&#xff0c;并将其存储于输出要素类中。 以三调图斑为例&#xff0c;图斑中有一个【DLMC】字段&#xff0c;该字段…

做好用户期望管理的4大重点

用户期望管理对项目成功至关重要&#xff0c;充分了解和满足用户期望可以提高项目的成功率&#xff0c;增加项目的商业价值。如果没有完全理解和忽略用户期望&#xff0c;后期往往容易造成需求变更和重复性工作等问题&#xff0c;增加项目成本和风险。 因此我们需重视用户期望管…