Small TopAppBar

news2024/11/25 16:21:11

Small 类型 TopAppBar

AppBar 主要由2类,顶部 AppBar底部 AppBar

  • 顶部 AppBar:主要包含了标题,action菜单,导航菜单。
  • 底部 AppBar:典型地包含主要导航项。

顶部 AppBar

顶部 AppBar 包含了 4 中类型: TopAppBar CenterAlignedTopAppBar MediumTopAppBar LargeTopAppBar

下面会逐个介绍 AppBar 的类型及给出示例。

TopAppBar

TopAppBar 是一个重要的组件,它提供了 Material Design 3 标准的顶部应用栏实现,提供现代化的外观和交互方式。TopAppBar 不仅具有直观且易用的 API,还支持高度定制,使得开发者能够轻松构建符合 Material Design 准则的应用界面。它通常包含应用的标题、导航图标、操作按钮等元素,为用户提供直观且一致的操作体验。

TopAppBar 特点

  • 高度可定制:开发者可以通过各种参数来定制 TopAppBar 的外观和行为,包括颜色、标题、导航图标、操作按钮等。
  • 响应式布局TopAppBar 支持不同的屏幕尺寸和方向,能够自动调整布局以适应不同的设备。
  • 易集成TopAppBar 与其他 Compose 组件和布局可以无缝集成,使得 UI 构建更加灵活和高效。

TopAppBar 声明及参数

下面是 TopAppBar 的声明。

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

参数列表

参数名类型描述
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.topAppBarColors() 提供了默认的颜色设置。
scrollBehaviorTopAppBarScrollBehavior?当页面内容可以滚动时,scrollBehavior 定义了应用栏如何响应滚动事件。例如,应用栏可以在页面向下滚动时隐藏,并在页面向上滚动时重新显示。

下图是基本的 TopAppBar 效果图及说明。

TopAppBar

TopAppBar 示例

下面是一个具体的示例代码及运行结果图。

@Composable
fun MyTopAppBar() {
    TopAppBar(
        // 标题内容
        title = { Text("我的应用") },
        // 导航图标
        navigationIcon = {
            IconButton(onClick = { /* 处理导航图标点击事件 */ }) {
                Icon(Icons.Default.Menu, contentDescription = "导航菜单")
            }
        },
        // 动作图标
        actions = {
            // 添加动作按钮
            IconButton(onClick = { /* 处理动作1点击事件 */ }) {
                Icon(Icons.Default.Favorite, contentDescription = "收藏")
            }
            IconButton(onClick = { /* 处理动作2点击事件 */ }) {
                Icon(Icons.Default.Search, contentDescription = "搜索")
            }
        },
        // 各项颜色配置
        colors = TopAppBarDefaults.topAppBarColors(
            containerColor = ButterflyBlue,			// appbar 容器颜色
            actionIconContentColor = Purple40,		// 动作图标内颜色
            titleContentColor = Color.Magenta,		// 标题(参数 title 表示的 composable)颜色
            navigationIconContentColor = OrangeA700		// 导航图标内容颜色
        )
    )
}

TopAppBar Sample

CenterAlignedTopAppBar

居中对齐顶部应用栏与 TopAppBar 基本一样,不同之处就在于它的标题默认居中放置。

CenterAlignedTopAppBar 的特点

  • 居中对齐的标题CenterAlignedTopAppBar的最大特点就是将标题文本居中放置在AppBar的中央,与传统的左对齐方式不同。这种设计可以让 AppBar 更加突出标题,特别是在标题较长或需要强调时。
  • 适应性强CenterAlignedTopAppBar能够根据不同的屏幕尺寸和方向自动调整其布局,确保UI在不同设备上的表现都是一致的。
  • 可定制性:开发者可以通过修改属性来定制CenterAlignedTopAppBar的外观和行为,例如修改标题文本、背景颜色、导航图标等。

CenterAlignedTopAppBar 声明及参数

CenterAlignedTopAppBar 的声明如下。

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

可以发现,除了名称不同,参数的默认给出不同外,声明中的参数个数及参数名与 TopAppBar 一致。两者都属于 Small 类型的 AppBar。

因此此组件的参数说明表不再给出,直接参考 TopAppBar 的参数说明表格即可。

CenterAlignedTopAppBar 示例

因为 CenterAlignedTopAppBar 的定义包括界面 UI 与 TopAppBar 高度一致,因此下面从影响 AppBar 滚动的角度来给出示例。通过修改 scrollBehavior 的值与运行效果图查看 scrollBehavior 值产生的不同结果。

@Composable
fun CenterAlignedTopAppBarAndScrollBehaviorSample() {
    // 记住滚动状态,另外的 2 个方法:exitUntilCollapsedScrollBehavior(),pinnedScrollBehavior() 。
    val scrollBehavior = TopAppBarDefaults.enterAlwaysScrollBehavior()
    Scaffold(
        topBar = {
            CenterAlignedTopAppBar(
                modifier=Modifier.border(width = 1.dp, color= Color.Gray),
                title = { Text("AppBar 滚动行为 enterAlwaysScroll") },
                scrollBehavior = scrollBehavior,
            )
        },
        modifier = Modifier.nestedScroll(scrollBehavior.nestedScrollConnection),
    ) { innerPadding ->
        // 实际的滚动内容
        LazyColumn(
            contentPadding = innerPadding,
            modifier = Modifier.fillMaxSize(),
        ) {
            items(100) { index ->
                ListItem(
                    headlineContent = { Text("Item $index") },
                    leadingContent = {
                        Icon(
                            imageVector = Icons.Default.Settings,
                            contentDescription = "Localized description"
                        )
                    }
                )
                HorizontalDivider(thickness = 3.dp, color = Color.Red)
            }
        }
    }
}

enterAlwaysScroll

exitUntilCollapsedScroll

pinnedScroll

从上述 3 个运行结果图,总结出 scrollBehavior 的值导致运行后 AppBar 在内容滚动时的不同表现。

  • enterAlwaysScrollBehavior():当页面内容向下滚动时,TopAppBar 会随着滚动而逐渐出现或保持在屏幕顶部。当页面内容向上滚动时,TopAppBar 会逐渐滑出屏幕,但一旦开始向下滚动,它就会立即开始重新出现。
  • exitUntilCollapsedScrollBehavior():当页面内容向下滚动时,TopAppBar 会保持在屏幕顶部,直到一个特定的偏移量(通常是与 TopAppBar 高度相等的折叠距离)被达到,之后它会随着内容继续向下滚动而逐渐滑出屏幕。当内容向上滚动时,TopAppBar 会保持隐藏,直到内容滚动回到那个特定的偏移量,然后它会随着内容的滚动而逐渐滑入屏幕。
  • pinnedScrollBehavior():无论页面内容如何滚动,TopAppBar 都会固定在屏幕顶部,不会随着滚动而移动。

CenterAlignedTopAppBar与TopAppBar的对比

CenterAlignedTopAppBarTopAppBar都是Jetpack Compose中用于创建顶部应用栏的组件,但它们有一些异同点:

  1. 标题对齐方式TopAppBar的标题默认是左对齐的,而CenterAlignedTopAppBar则是将标题居中对齐。这是两者之间最显著的区别。
  2. 功能与使用:除了标题对齐方式不同外,两者在其他功能和使用上基本相似。它们都可以设置导航图标、操作项、背景颜色等,并且可以与其他Compose组件协同工作。
  3. 适用场景TopAppBar适用于大多数情况,特别是当标题较短或不需要特别强调时。而CenterAlignedTopAppBar则更适合在标题较长或需要突出标题时使用。

TopAppBar 是 Jetpack Compose Material3 库中一个重要的组件,它提供了实现 Material Design 3 顶部应用栏的便捷方式。通过合理使用 TopAppBar,开发者可以构建出符合 Material Design 准则、用户体验良好的 Android 应用界面。随着 Jetpack Compose 的不断发展和完善,TopAppBar 将在未来的 Android 应用开发中发挥更加重要的作用。

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

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

相关文章

玩转小米:如何取消王者荣耀微信双开默认选择

文章目录 💢 问题 💢🏡 演示环境 🏡💯 解决方案 💯💢 问题 💢 当我们在手机上安装了多个微信(分身)后,在一些软件(例如王者)使用微信登入时会出现让们选择使用哪个微信进行登入,但是有时候我们不小心设置了默认某一个微信登入后,下次就无法出现选择页面…

物联网与智慧城市:融合创新,塑造未来城市生活新图景

一、引言 在科技飞速发展的今天,物联网与智慧城市的融合创新已成为推动城市发展的重要力量。物联网技术通过连接万物,实现信息的智能感知、传输和处理,为智慧城市的构建提供了无限可能。智慧城市则运用物联网等先进技术,实现城市…

信息系统项目管理师--项目整合管理

项⽬整合管理包括识别、定义、组合、统⼀和协调项⽬管理过程组的各个过程和项⽬管理活动。在项⽬管理中,整合管理兼具统⼀、合并、沟通和建⽴联系的性质,项⽬整合管理贯穿项⽬始终 项⽬整合管理的⽬标包括: ①资源分配: ②平衡竞…

【2024】vue-router和pinia的配置使用

目录 vue-routerpiniavue-routerpinia进阶用法---动态路由 有同学在项目初始化后没有下载vue-router和pinia,下面开始: vue-router npm install vue-router然后在src目录下创建文件夹router,以及下面的index.ts文件: 写进下面的…

每日一题-反转链表

🌈个人主页: 会编辑的果子君 💫个人格言:“成为自己未来的主人~” 下面是代码的解题过程: /*** Definition for singly-linked list.* struct ListNode {* int val;* struct ListNode *next;* };*/ typedef struct ListNode SLis…

【PowerMockito:编写单元测试过程中原方法没有注入的属性在跑单元测试时出现空指针】

出错场景 下面这一步报空指针,但是因为没有注入,在测试类中无法使用Mock 解决 在执行方法前,加入以下代码 MemberModifier.field(ResourceServiceImpl.class,"zero").set(resourceService,"0");

基于springboot的中小企业设备管理系统设计与实现论文

中小企业设备管理系统 摘要 随着信息技术在管理上越来越深入而广泛的应用,管理信息系统的实施在技术上已逐步成熟。本文介绍了中小企业设备管理系统的开发全过程。通过分析中小企业设备管理系统管理的不足,创建了一个计算机管理中小企业设备管理系统的方…

车载光控膜(汽车光线控制膜)行业迎来发展机遇 我国市场国产化进程加快

车载光控膜(汽车光线控制膜)行业迎来发展机遇 我国市场国产化进程加快 车载光控膜又称汽车光线控制膜,指通过控制光线出光方向,防止大尺寸车载显示屏反光倒影成像到挡风玻璃的功能性薄膜。车载光控膜具有提高视觉舒适度、保证车辆…

使用 Docker 部署 File Browser 文件管理系统

1)File Browser 介绍 官网:https://filebrowser.org/ GitHub:https://github.com/filebrowser/filebrowser 今天为大家分享一款开源的私有云盘项目:File Browser,简单实用、轻量级、跨平台,安装部署简单快…

Maya笔记 软选择

文章目录 1什么是软选择2注意3如何打开软选择3.1方法一3.2方法二 4调整软选择的范围5衰减模式5.1体积模式5.2表面模式 6衰减曲线 1什么是软选择 也就是渐变选择,从中心点向外影响力度越来越小 软选择针对的是点线面这些模型元素 下图中展示了对被软选择的区域移动…

二、MySQL基础语法重点!(增删查改)

目录 一、SQL的增删改(DML) 1、添加数据 2、修改数据 3、删除数据 二、SQL查询(DQL) (一)基本查询 (二)条件查询 (三)聚合函数 (四&#…

牛客网 华为机试 进制转换

本题是要将十六进制的字符串转换成十进制。看到题目第一眼就想到用map进行十六进制和十进制的映射。 然后我们需要注意,字符串前面会有0X,这只是一个标识十六进制的标识符,没有具体数字意义,我们在转换的时候,需要把它…

视频怎么压缩?不影响视频画质的三个方法

在数字化时代,高清晰度和4K视频的广泛应用使得我们在制作、分享和传输视频时拥有了更多的可能性。然而,随之而来的问题就是庞大的视频文件大小,不仅占用存储空间,而且在上传、分享和传输过程中可能遇到一系列的困扰。 为了解决这…

牛客网 华为机试 质因子

本题是要求一个数的所有质因子,包括重复的,比如180。首先质数就是素数,其只能被1和其本身整除(1不是质数)。比如2的因子只有1和2,3的因子只有1和3,5的因子只有1和5。 比如题中的180,…

小兴教你做平衡小车-stm32程序开发(PWM)

1 程序分享 main.c文件。 #include "stm32f10x.h" #include "led.h" #include "delay.h" #include "usart.h" #include "key.h" #include "tim.h" #include "pwm.h" #include "stdio.h"int…

挑战杯 基于深度学习的人脸表情识别

文章目录 0 前言1 技术介绍1.1 技术概括1.2 目前表情识别实现技术 2 实现效果3 深度学习表情识别实现过程3.1 网络架构3.2 数据3.3 实现流程3.4 部分实现代码 4 最后 0 前言 🔥 优质竞赛项目系列,今天要分享的是 基于深度学习的人脸表情识别 该项目较…

【S32K3驱动配置】-1.1-GPIO配置及其应用-点亮LED灯(基于SDK)

目录(共10页精讲,手把手教你S32K3从入门到精通) 实现的软件架构:基于Drivers层(以往的SDK) 前期准备工作: 1 创建一个FREERTOS工程 2 点亮评估板S32K312EVB-Q172中D13 LED灯 2.1 S32K312EV…

C++ 之LeetCode刷题记录(三十八)

😄😊😆😃😄😊😆😃 开始cpp刷题之旅。 目标:执行用时击败90%以上使用 C 的用户。 18. 四数之和 给你一个由 n 个整数组成的数组 nums ,和一个目标值 target…

Thonny 开发环境下使用PICO系列教程1———利用Pico芯片内置传感器输出温度

Thonny 开发环境下使用PICO系列教程1———利用Pico芯片内置传感器输出温度 一、安装Thonny环境安装测试 在Thonny设定CircuitPython环境硬件部分Thonny部分 利用Pico内置温度传感器输出CPU温度 一、安装Thonny 下载链接: https://github.com/thonny/thonny/releas…

STM32各外设初始化步骤

1、GPIO初始化步骤 1、使能GPIO时钟 2、初始化GPIO的输入/输出模式 3、设置GPIO的输出值或获取GPIO的输入值 GPIO_InitTypeDef GPIO_InitStruct;RCC_APB2PeriphClockCmd(RCC_APB2Periph_GPIOA,ENABLE);GPIO_InitStruct.GPIO_Mode GPIO_Mode_Out_PP; GPIO_InitStruct.GPIO_Pin…