当前位置: 首页 > article >正文

HarmonyOS:ComposeTitleBar 组件自学指南

在日常的鸿蒙应用开发工作中,我们常常会面临构建美观且功能实用的用户界面的挑战。而标题栏作为应用界面的重要组成部分,它不仅承载着展示页面关键信息的重任,还能为用户提供便捷的操作入口。最近在参与的一个项目里,我就深深体会到了选择合适的标题栏组件对于提升用户体验的关键作用。当时,团队对于标题栏有着多样化的需求,既要简洁明了地呈现页面主题,又要能灵活地配置菜单选项以满足不同场景下的交互操作。在探索的过程中,我发现了 ComposeTitleBar 组件,经过一番深入钻研与实践,成功地将其运用到项目中,显著优化了界面效果。为了帮助更多开发者少走弯路,快速掌握这个强大的组件,我决定写下这篇自学指南,分享我在学习与使用过程中的经验与心得。

一、组件初相识

ComposeTitleBar 组件从 API Version 10 开始支持,这意味着只要你的开发环境适配该版本及以上,就能引入并使用它。后续版本如有新增内容,则采用上角标单独标记该内容的起始版本,所以大家在学习和使用时,一定要留意版本差异,以便充分利用组件的最新特性。

二、导入模块

要使用 ComposeTitleBar 组件,首先需要正确导入相关模块:

import { ComposeTitleBar } from '@kit.ArkUI'

这里简洁明了地从指定的 ArkUI 工具包中引入了 ComposeTitleBar 组件,这是使用该组件的第一步,也是后续构建标题栏功能的基础。

三、子组件

值得注意的是,ComposeTitleBar 组件没有子组件,它自身就具备相对独立且完善的功能结构,专注于标题栏的呈现与交互。

四、属性详解

  1. 不支持通用属性:这一点需要牢记,在使用时不能按照常规组件的通用属性思维来配置它,而是要依据其特定的属性规则。
  2. ComposeTitleBar 构造函数:
    • ComposeTitleBar({item?: ComposeTitleBarMenuItem, title: ResourceStr, subtitle?: ResourceStr, menuItems?: Array<ComposeTitleBarMenuItem>})
    • 装饰器类型:@Component,这表明它遵循组件的基本构建规范,方便在鸿蒙应用的组件体系中进行整合。
    • 元服务 API:从 API version 11 开始,该接口支持在元服务中使用,拓展了其应用场景,让开发者可以在元服务开发中也能借助该组件打造专业的标题栏。
    • 系统能力:SystemCapability.ArkUI.ArkUI.Full,意味着需要系统具备相应的 ArkUI 完整能力支持,在开发环境搭建与适配时要确保满足这一条件。
    • 具体属性:
      • item:类型为 ComposeTitleBarMenuItem,可选。它用于左侧头像的单个菜单项目,为标题栏的左侧交互区域提供定制化功能,比如可以设置头像点击后的动作、显示样式等。
      • title:类型为 ResourceStr,必填。这是标题栏最核心的展示内容,用于清晰地告知用户当前页面的主题,需要根据页面功能准确填写。
      • subtitle:类型为 ResourceStr,可选。作为标题的补充信息,能进一步细化页面的描述,提升信息传达的完整性,在一些需要详细说明的页面场景中十分实用。
      • menuItems:类型为 Array<ComposeTitleBarMenuItem>,可选。它是右侧菜单项目列表,通过配置多个菜单项,可以为用户提供一系列操作选择,极大地增强了标题栏的交互性。
    • 入参对象不可为 undefined:即 ComposeTitleBar(undefined) 这种写法是错误的,确保在使用组件时传入正确且有效的参数值。
  3. ComposeTitleBarMenuItem:
    • 系统能力:同样依赖 SystemCapability.ArkUI.ArkUI.Full
    • 具体属性:
      • value:类型为 ResourceStr,必填。它代表图标资源,用于在菜单中显示直观的图标,让用户一眼就能识别操作含义,提升交互效率。
      • label13+:类型为 ResourceStr,从 API version 13 开始支持在元服务中使用,可选。它为图标提供标签描述,在一些图标表意不够清晰或者需要辅助说明的情况下,能帮助用户更好地理解操作功能,特别是对于无障碍访问场景尤为重要。
      • isEnabled:类型为 boolean,可选,默认禁用。用于控制菜单项是否可用,当 isEnabled 为 true 时表示启用,用户可以点击触发相应操作;为 false 时表示禁用,避免用户误操作或者在特定场景下限制某些功能的使用。需要注意的是,item 属性不支持触发 isEnabled 属性。
      • action:类型为 () => void,可选。它是触发时的动作闭包,定义了用户点击菜单项后要执行的操作,比如弹出提示框、跳转页面等。同样,item 属性不支持触发 action 事件。

五、事件

ComposeTitleBar 组件不支持通用事件,这就要求我们在开发过程中,充分利用其提供的属性配置来实现交互逻辑,而不是依赖传统的通用事件监听方式。

六、示例剖析与实践拓展

下面让我们深入研究给定的示例,理解如何将这些知识转化为实际的界面构建。
示例实现了简单的标题栏,带有返回箭头的标题栏和带有右侧菜单项目列表的标题栏。

import { ComposeTitleBar, promptAction, ComposeTitleBarMenuItem } from '@kit.ArkUI'@Entry
@Component
struct Index {//定义右侧菜单项目列表private menuItems: Array<ComposeTitleBarMenuItem> = [{//菜单图片资源value: $r('app.media.ic_public_save'),//启用图标isEnabled: true,//点击菜单时触发事件action: () => promptAction.showToast({ message: "保存成功" })},{value: $r('app.media.ic_public_reduce'),isEnabled: true,action: () => promptAction.showToast({ message: "缩小操作" })},{value: $r('app.media.ic_public_edit'),isEnabled: true,action: () => promptAction.showToast({ message: "进入编辑模式" })},{value: $r('app.media.ic_public_remove'),isEnabled: true,action: () => promptAction.showToast({ message: "删除操作" })},]build() {Row() {Column() {//分割线Divider().height(2).color(0xCCCCCC)ComposeTitleBar({title: "精彩资讯页面",subtitle: "每日最新动态",menuItems: this.menuItems.slice(0, 1),})Divider().height(2).color(0xCCCCCC)ComposeTitleBar({title: "个人中心",subtitle: "管理您的账户",menuItems: this.menuItems.slice(0, 2),})Divider().height(2).color(0xCCCCCC)ComposeTitleBar({title: "设置",subtitle: "个性化配置",menuItems: this.menuItems,})Divider().height(2).color(0xCCCCCC)//定义带头像的标题栏ComposeTitleBar({menuItems: [{ isEnabled: true, value: $r('app.media.ic_public_save'),action: () => promptAction.showToast({ message: "收藏成功" })}],title: "收藏夹",subtitle: "您的专属收藏",item: { isEnabled: true, value: $r('app.media.app_icon') }})Divider().height(2).color(0xCCCCCC)}}.height('100%')}
}

在这个示例中:

  • 首先,我们导入了必要的模块,包括 ComposeTitleBar、promptAction(用于弹出提示信息)以及 ComposeTitleBarMenuItem。
  • 接着,定义了一个私有的 menuItems 数组,其中包含了多个 ComposeTitleBarMenuItem 对象,每个对象详细配置了图标资源、是否启用以及点击后的动作,比如保存、编辑、删除等操作对应的提示信息,让用户在交互时有明确的反馈。
  • 在 build 方法中,通过 Row 和 Column 组件构建了页面布局结构,并在其中插入了多个 ComposeTitleBar 组件实例。每个实例根据不同的页面场景设置了独特的标题、副标题以及右侧菜单项目。例如,在 “精彩资讯页面” 标题栏,设置了简洁的标题和副标题,同时只展示了一个 “保存” 菜单选项;而在 “设置” 页面的标题栏,则完整展示了所有的菜单选项,满足用户对多样化操作的需求。对于带头像的标题栏,如 “收藏夹” 页面,不仅配置了头像的图标资源,还设置了头像点击后的收藏提示动作,丰富了标题栏的交互维度。

七、实践拓展建议

  1. 样式定制:可以尝试修改 Divider 的样式,如更改颜色为与应用主题更匹配的色调,或者调整高度以适应不同屏幕尺寸下的视觉效果。对于 ComposeTitleBar 本身,探索修改标题、副标题的字体大小、颜色,使其在不同页面有更突出的显示效果,增强信息可读性。
  2. 交互优化:在 action 闭包中,不仅仅局限于弹出提示框,可以实现页面跳转,比如点击 “编辑” 菜单跳转到编辑页面,或者与后端数据交互,实现实时保存用户在标题栏操作后的设置变更等复杂功能。
  3. 适配多设备:考虑不同设备屏幕尺寸,对于菜单选项的显示数量、布局进行动态调整,确保在手机、平板等设备上都能有良好的用户体验。例如,在平板上可以适当增加菜单选项的横向排列数量,充分利用大屏幕空间。

总之,ComposeTitleBar 组件为鸿蒙应用开发的标题栏构建提供了强大而便捷的解决方案。通过深入理解其属性、合理运用示例代码并积极实践拓展,相信大家都能快速上手,打造出满足各种需求的优质标题栏,提升应用的整体品质与用户满意度。

相关文章:

HarmonyOS:ComposeTitleBar 组件自学指南

在日常的鸿蒙应用开发工作中&#xff0c;我们常常会面临构建美观且功能实用的用户界面的挑战。而标题栏作为应用界面的重要组成部分&#xff0c;它不仅承载着展示页面关键信息的重任&#xff0c;还能为用户提供便捷的操作入口。最近在参与的一个项目里&#xff0c;我就深深体会…...

25-智慧旅游系统(协同算法)三端

介绍 技术&#xff1a; 基于 B/S 架构 SpringBootMySQLLayuivue 环境&#xff1a; Idea mysql maven jdk1.8 node 管理端功能 首页展示图表&#xff1a;以数据可视化方式展示关键业务数据。 用户管理&#xff1a;管理系统用户&#xff0c;包括查看、编辑等操作。 供应商管…...

数据结构实验1.2: 顺序表的基本运算

文章目录 一&#xff0c;问题描述二&#xff0c;基本要求三&#xff0c;算法分析&#xff08;1&#xff09;插入算法&#xff08;2&#xff09;删除算法 四&#xff0c;参考程序五&#xff0c;运行效果 一&#xff0c;问题描述 创建一个顺序表&#xff0c;编程实现顺序表的下列…...

Swoole 的 Hyperf 框架和 Go 的 Gin 框架高并发原理以及技术实现对比分析

Swoole 的 Hyperf 框架和 Go 的 Gin 框架虽然都支持高并发&#xff0c;但它们的实现原理、底层机制和适用场景有显著差异。以下从 高并发原理、技术实现区别、优缺点 三个方面详细分析&#xff1a; 一、高并发实现原理 1. Hyperf (PHP Swoole) Hyperf 的高并发能力基于 Swoo…...

【QT】QT中的信号与槽

QT中的信号与槽 一、信号与槽函数的作用二、如何关联信号与槽函数1、借助集成开发环境&#xff0c;右键转到槽函数示例代码&#xff1a; 2、调用connect函数手动关联信号与槽函数 三、扩展四、总结信号与槽的特点1、一个类如果要使用信号以及槽函数&#xff0c;那么该类的定义中…...

使用Python爬虫获取1688商品(按图搜索)接口

一、引言 随着电商行业的不断发展&#xff0c;消费者对商品搜索的效率和准确性要求越来越高。1688作为国内领先的B2B电商平台&#xff0c;提供了丰富的商品搜索功能&#xff0c;其中按图搜索功能&#xff08;类似于淘宝的拍立淘&#xff09;极大地提升了用户的购物体验。本文将…...

C/C++ JSON 库综合对比及应用案例(六)

第六部分&#xff1a;C/C JSON 库综合对比及应用案例 &#x1f4e2; 快速掌握 JSON&#xff01;文章 视频双管齐下 &#x1f680; 如果你觉得阅读文章太慢&#xff0c;或者更喜欢 边看边学 的方式&#xff0c;不妨直接观看我录制的 JSON 课程视频&#xff01;&#x1f3ac; …...

AI Agent拐点已至,2B+2C星辰大海——行业深度报告

大家好&#xff0c;我是吾鳴。 今天吾鳴要给大家分享一份由开源证券出品的关于AI Agent的报告&#xff0c;报告从AI Agent商业化应用、C端B端应用与布局&#xff0c;投资建议等方向介绍2025AI Agent新元年。报告一共28页PDF&#xff0c;文末有完整版下载地址。 内容摘要 2025年…...

【CSS】- 表单控件的 placeholder 如何控制换行显示?

表单控件的 placeholder 如何换行展示&#xff1f; HTML 中&#xff0c;<textarea> 元素的 placeholder 属性默认情况下不支持换行。不过&#xff0c;可以通过以下几种方法来实现换行效果&#xff1a; 模版字符串 模板字符串可以轻松地创建多行字符串&#xff0c;而不…...

Mac 终端命令大全

—目录操作— ꔷ mkdir 创建一个目录 mkdir dirname ꔷ rmdir 删除一个目录 rmdir dirname ꔷ mvdir 移动或重命名一个目录 mvdir dir1 dir2 ꔷ cd 改变当前目录 cd dirname ꔷ pwd 显示当前目录的路径名 pwd ꔷ ls 显示当前目录的内容 ls -la ꔷ dircmp 比较两个目录的内容 d…...

常用天然地震链接

一些常用的天然地震链接汇总&#xff1a; 天然地震数据 - IRIS Wilber 3 DATA: NSF SAGE: Wilber 3: Select Event地震学入门知识 - 地震“学”网站&#xff1a;地震“学”地震数据处理Matlab code - github &#xff1a;The GISMO Toolbox - seismic data analysis in MATLAB…...

node.js、npm相关知识

Node.js 是一个基于 Chrome V8 JavaScript 引擎 构建的开源、跨平台的 JavaScript 运行时环境&#xff0c;主要用于服务器端编程。它允许开发者使用 JavaScript 编写高性能的后端服务&#xff0c;突破了 JavaScript 仅在浏览器中运行的限制。 npm&#xff08;Node Package Man…...

基于HTML5和CSS3实现3D旋转相册效果

基于HTML5和CSS3实现3D旋转相册效果 这里写目录标题 基于HTML5和CSS3实现3D旋转相册效果项目介绍技术栈核心功能实现原理1. HTML结构2. CSS样式设计2.1 基础样式设置2.2 容器样式2.3 图片样式 3. JavaScript实现4. 交互功能实现4.1 触摸和鼠标拖拽4.2 播放控制 项目亮点技术难点…...

‌在 Fedora 系统下备份远程 Windows SQL Server 数据库的完整方案

‌一、环境准备与工具安装‌ ‌1. 安装 Microsoft SQL Server 命令行工具‌ Fedora 需安装 mssql-tools 和 ODBC 驱动&#xff1a; # 添加 Microsoft 仓库 sudo curl -o /etc/yum.repos.d/msprod.repo https://packages.microsoft.com/config/rhel/8/prod.repo# 安装工具包 …...

上市电子制造企业如何实现合规的质量文件管理?

浙江洁美电子科技股份有限公司成立于2001年&#xff0c;是一家专业为片式电子元器件(被动元件、分立器件、集成电路及LED)配套生产电子薄型载带、上下胶带、离型膜、流延膜等产品的国家高新技术企业&#xff0c;主要产品有分切纸带、打孔经带、压孔纸带、上下胶带、塑料载带及其…...

什么是SSE和websocket

以下是 SSE&#xff08;Server-Sent Events&#xff09; 和 WebSocket 在大模型&#xff08;如 ChatGPT&#xff09;流式输出中的实际例子对比&#xff0c;包含代码实现和场景分析&#xff1a; —### 1. SSE&#xff08;Server-Sent Events&#xff09;#### 场景 大模型生成文本…...

QT操作Word文档

虽然 Qt 没有原生支持 Word 文档操作的模块,但可以通过以下几种方式实现 Word 文档的读写和操作: 1、使用 ActiveX/COM (仅限 Windows) 2、使用第三方库 (跨平台),比如: libopendocument等。 3、直接操作 DOCX 文件 (DOCX 是 ZIP+XML) 4、使用 HTML 作为中介格式 一、使…...

Redis 源码硬核解析系列专题 - 第一篇:Redis源码入门与整体架构

1. 引言 Redis作为一个高性能的内存键值数据库,其源码以简洁高效著称。通过解析Redis源码,我们可以深入理解其单线程模型、事件驱动机制以及模块化设计的精髓。本篇将从Redis的源码目录结构入手,剖析其整体架构,并聚焦启动流程和事件循环的核心实现。 2. Redis源码目录结构…...

vscode中的【粘滞滚动】的基本概念和作用,关闭了以后如何开启

1、粘滞滚动的基本概念和作用 ‌VSCode中的“粘滞”功能主要是指编辑器在滚动时的一种特殊效果&#xff0c;使得编辑器在滚动到某个位置时会“粘”在那里&#xff0c;而不是平滑滚动到底部或顶部。‌ 粘滞滚动的基本概念和作用 粘滞滚动功能可以让用户在滚动时更直观地看到当前…...

APIPost接口测试完整流程指南

APIPost接口测试完整流程指南 APIPost是一款国产的API开发测试工具&#xff0c;结合了Postman、Swagger和Mock的功能。以下是详细的APIPost接口测试流程&#xff1a; 一、环境准备 下载安装 官网下载&#xff1a;Apipost-API 文档、设计、调试、自动化测试一体化协作平台 支…...

IDEA如何设置以新窗口打开新项目

在 IntelliJ IDEA 中设置以新窗口打开新项目&#xff0c;可以通过以下两种方式实现&#xff1a; 方法 1&#xff1a;通过对话框提示选择新窗口 打开项目时&#xff1a; 当通过 File > Open&#xff08;或欢迎界面点击 Open&#xff09;选择新项目时&#xff0c;IDEA 会弹出对…...

【含文档+PPT+源码】基于微信小程序的社交摄影约拍平台的设计与实现

项目介绍 本课程演示的是一款基于微信小程序的社交摄影约拍平台的设计与实现&#xff0c;主要针对计算机相关专业的正在做毕设的学生与需要项目实战练习的 Java 学习者。 1.包含&#xff1a;项目源码、项目文档、数据库脚本、软件工具等所有资料 2.带你从零开始部署运行本套系…...

C#使用用户名密码连接共享文件夹

C#使用用户名密码连接共享文件夹 创建连接 using System.ComponentModel; using System.Runtime.InteropServices;namespace Tests.ConsoleApp {public class ShareDirectoryConnect : IDisposable{private static readonly HashSet<Guid> _TOKENS new HashSet<Gui…...

Springboot集成Dubbo和Zookeeper框架搭建

目录 1.搭建环境 2.搭建步骤 3.效果展示 4.注意项 1.搭建环境如下图所示&#xff1a; 2.搭建步骤 2.1 目标概述 一共三个服务,一个公共接口服务,一个提供者服务,一个消费者服务。最终以浏览器或者postman查询接口,实现订单信息回显。最终项目结构如图所示&#xff1a; 2.2 …...

发票管理自动化-发票查验接口让财务告别繁琐的核验流程

发票管理的效率与准确性直接影响着企业运营的顺畅性&#xff0c;在过去&#xff0c;财务人员查验发票时&#xff0c;需手工输入发票代码、号码、日期、金额、验证码等信息一张一张进行核验。整个过程不仅操作繁琐&#xff0c;而且极易出错。若遇到验证码难以辨认的情况&#xf…...

小程序28-事件传参-data-*自定义数据

事件传参&#xff1a;在触发事件时&#xff0c;将一些数据作为参数传递给事件处理函数的过程&#xff0c;就是事件传参 在微信小程序中&#xff0c;我们经常会在组件上添加一些自定义数据&#xff0c;然后在事件处理函数中获取这些自定义数据&#xff0c;从而完成业务逻辑的开…...

基于modbusTcp连接Modbus Slave本地模拟服务通讯(C#编写ModbusTcp类库)(一)

C#编写ModbusTcp类库,模拟plc进行本地通信测试 Modbus是一个应用层协议,常用于工业自动化设备之间的通信,主要有两种传输方式:RTU和TCP。 常见的功能码包括读取线圈(01)、读取离散输入(02)、读保持寄存器(03)、读输入寄存器(04)、写单个线圈(05)、写单个寄存器(…...

IS-IS:单区域集成配置与多区域集成配置

一、IS-IS概述 IS-IS&#xff08;Intermediate System to Intermediate System&#xff09; 是一种链路状态内部网关协议&#xff08;IGP&#xff09;&#xff0c;设计用于自治系统&#xff08;AS&#xff09;内部的路由选择。最初由ISO为OSI模型的无连接网络服务&#xff08;…...

Open GL ES ->GLSurfaceView正交投影与透视投影方法中近远平面取值参考

坐标系 OpenGL ES使用右手坐标系&#xff0c;相机默认朝向负z方向 相机位置|vz轴<----- 0 -----> -near -----> -far -----不可见 可见区域 不可见裁剪规则 far>near>0&#xff0c;只有z值在[-far, -near]范围内的物体可见&#xff0c; 当z > -near…...

API 安全之认证鉴权

作者&#xff1a;半天 前言 API 作为企业的重要数字资源&#xff0c;在给企业带来巨大便利的同时也带来了新的安全问题&#xff0c;一旦被攻击可能导致数据泄漏重大安全问题&#xff0c;从而给企业的业务发展带来极大的安全风险。正是在这样的背景下&#xff0c;OpenAPI 规范…...