uniapp-x的HarmonyOS鸿蒙应用开发:tabbar底部导航栏的实现

uniapp-x的HarmonyOS鸿蒙应用开发:tabbar底部导航栏的实现
假期期间,百无聊赖。空闲时间够多了吧?有时候感觉特别的百无聊赖。不睡懒觉,电影不看,手机不刷,游戏不玩,也无处可去。那么做什么呢? 于是翻出来之前做过的“爱影家”影视app项目,找个跨多端的技术栈实战学习一把。我先后尝试了kuikly、flutter 、arkui-x等框架,结果。。。,额,这几个没少踩坑做不动了。真想向天问一下,跨平台框架开发哪家强?最后尝试了下uni-app x,被惊艳到了。果然dcloud很给力啊。且uni-app-x的性能很给力。还停留在uniapp只擅长小程序吗?唯独被诟病的是:uniapp-x的uts语法很难受啊,写法跟ts差异很大,且大模型不认识uts语法。

可以体验打包后的hello uni-app x这个demo项目,地址是:https://hellouniappx.dcloud.net.cn/

可以看到组件很全面啊,我先后体验了android端,鸿蒙端和小程序端,界面UI效果一致,且鸿蒙端运行相当流畅。可以看到组件还是很丰富的。浏览器端的体检们可以直接访问:https://hellouniappx.dcloud.net.cn/web#/pages/component/view/view

UTS语法介绍:https://doc.dcloud.net.cn/uni-app-x/uts/

鸿蒙next手机端的体验:

使用鸿蒙next手机的应用商店,搜索“DCloud开发者中心系统”可以下载安装体验。据说渲染速度超过了原生写法,你说牛不牛吧?

HBuilderX 5.0先推出了鸿蒙版的蒸汽模式介绍:https://doc.dcloud.net.cn/uni-app-x/app-harmony/harmony-vapor.html

这个无名的渲染系统,实现了跨平台App框架的历史突破,即:基于原生渲染管线,但超越了原生的渲染速度

• vue蒸气模式(Vapor),免除vnode的创建耗时,渲染速度更快。
• 新版App渲染系统,依然是基于原生渲染管线,但渲染速度超过原生写法。

项目概述

本文基于爱影家(imovie)项目,介绍如何使用uni-app x技术栈在鸿蒙平台上实现tabBar底部导航栏。uni-app x是DCloud推出的新一代跨平台开发框架,支持将代码编译为多个平台的原生代码,包括:

  • Android平台:编译为Kotlin
  • iOS平台:编译为Swift
  • 鸿蒙Next平台:编译为ArkTS
  • Web和小程序平台:编译为JS

在Android平台,uni-app x的工程被整体编译为Kotlin代码,本质上是换了Vue写法的原生Kotlin应用,在性能上与原生Kotlin一致。

在这里插入图片描述

实现步骤

环境准备:

下载安装hbuilderx的当前最新版本4.87,下载链接:https://www.dcloud.io/hbuilderx.html
下载安装devStudio当前最新版本6.0.2,下载链接:https://developer.huawei.com/consumer/cn/develop/

1. 目录结构准备

打开hbuilderx的IDE,新建项目,选择第一个默认模板即可。注意一定要勾选下面的uniapp-x,这样生成的才是uniapp-x的项目工程。

在这里插入图片描述

以下是几个关键目录和文件:

  • pages/:存放应用页面
  • static/:存放静态资源,包括tabBar图标
  • pages.json:配置应用页面和tabBar
  • theme.json:配置主题变量

在本项目中,我们创建了以下目录结构:

pages/ └── tabBar/ ├── home.uvue # 首页 ├── zhihu.uvue # 日报页 └── mine.uvue # 我的页面 static/ ├── ic_tab_home.png # 首页默认图标 ├── ic_tab_active_home.png # 首页选中图标 ├── ic_tab_ribao.png # 日报默认图标 ├── ic_tab_ribao_active.png # 日报选中图标 ├── ic_tab_me.png # 我的默认图标 └── ic_tab_active_me.png # 我的选中图标

2. 配置pages.json

pages.json文件中,我们需要配置应用页面和tabBar。uni-app x支持条件编译,可以为不同平台配置不同的tabBar参数。

页面配置

首先,在pages数组中定义应用的页面:

{"pages":[{"path":"pages/tabBar/home","style":{"navigationBarTitleText":"首页","backgroundColorContent":"@tabBarPagebackgroundColorContent"}},// #ifdef APP-ANDROID || APP-IOS || WEB || MP-WEIXIN || APP-HARMONY{"path":"pages/tabBar/zhihu","style":{"navigationBarTitleText":"日报","backgroundColorContent":"@tabBarPagebackgroundColorContent"}},// #endif// #ifdef APP-ANDROID || APP-IOS || WEB || MP-WEIXIN || APP-HARMONY{"path":"pages/tabBar/mine","style":{"navigationBarTitleText":"我的","backgroundColorContent":"@tabBarPagebackgroundColorContent"}}// #endif]}
tabBar配置

然后,在tabBar对象中配置底部导航栏。由于鸿蒙平台的特殊性,我们使用条件编译为鸿蒙平台单独配置:

// #ifndef APP-HARMONY"tabBar":{"color":"@tabBarColor","selectedColor":"@tabBarSelectedColor","borderStyle":"@tabBarBorderStyle","backgroundColor":"@tabBarBackgroundColor","list":[{"pagePath":"pages/tabBar/home","iconPath":"@tabBarHomeIconPath","selectedIconPath":"@tabBarHomeSelectedIconPath","text":"首页"},{"pagePath":"pages/tabBar/zhihu","iconPath":"@tabBarZhiHuIconPath","selectedIconPath":"@tabBarZhiHuSelectedIconPath","text":"日报"},{"pagePath":"pages/tabBar/mine","iconPath":"@tabBarMineIconPath","selectedIconPath":"@tabBarMineSelectedIconPath","text":"我的"}]},// #endif// #ifdef APP-HARMONY"tabBar":{"color":"@tabBarColor","selectedColor":"@tabBarSelectedColor","borderStyle":"@tabBarBorderStyle","backgroundColor":"@tabBarBackgroundColor","list":[{"pagePath":"pages/tabBar/home","iconPath":"static/ic_tab_home.png","selectedIconPath":"static/ic_tab_active_home.png","text":"首页"},{"pagePath":"pages/tabBar/zhihu","iconPath":"static/ic_tab_ribao.png","selectedIconPath":"static/ic_tab_ribao_active.png","text":"日报"},{"pagePath":"pages/tabBar/mine","iconPath":"static/ic_tab_me.png","selectedIconPath":"static/ic_tab_active_me.png","text":"我的"}]},// #endif

3. 配置theme.json

theme.json文件中,我们定义了tabBar相关的主题变量,包括颜色、图标路径等:

{"light":{"navigationBarTextStyle":"white","navigationBarBackgroundColor":"#007AFF","backgroundColorContent":"#efeff4","tabBarPagebackgroundColorContent":"#efeff4","backgroundColor":"#efeff4","backgroundTextStyle":"dark","tabBarColor":"#7A7E83","tabBarSelectedColor":"#007AFF","tabBarBorderStyle":"black","tabBarBackgroundColor":"#F8F8F8","tabBarHomeIconPath":"static/ic_tab_home.png","tabBarHomeSelectedIconPath":"static/ic_tab_active_home.png","tabBarZhiHuIconPath":"static/ic_tab_ribao.png","tabBarZhiHuSelectedIconPath":"static/ic_tab_ribao_active.png","tabBarMineIconPath":"static/ic_tab_me.png","tabBarMineSelectedIconPath":"static/ic_tab_active_me.png"},"dark":{"navigationBarTextStyle":"white","navigationBarBackgroundColor":"#1F1F1F","backgroundColor":"#1F1F1F","backgroundColorContent":"#646464","tabBarPagebackgroundColorContent":"#1F1F1F","backgroundTextStyle":"light","tabBarColor":"#cacaca","tabBarSelectedColor":"#007AFF","tabBarBorderStyle":"white","tabBarBackgroundColor":"#1F1F1F","tabBarHomeIconPath":"static/ic_tab_home.png","tabBarHomeSelectedIconPath":"static/ic_tab_active_home.png","tabBarZhiHuIconPath":"static/ic_tab_ribao.png","tabBarZhiHuSelectedIconPath":"static/ic_tab_ribao_active.png","tabBarMineIconPath":"static/ic_tab_me.png","tabBarMineSelectedIconPath":"static/ic_tab_active_me.png"}}

这样,我们就可以在pages.json中使用@tabBarColor等变量来引用这些配置。

4. 创建页面文件

pages/tabBar/目录下创建三个页面文件:

  • home.uvue:首页
  • zhihu.uvue:日报页
  • mine.uvue:我的页面

这些页面文件使用.uvue后缀,这是uni-app x的特有文件格式,支持Vue语法和原生能力。

技术要点

1. 条件编译

uni-app x支持条件编译,可以为不同平台编写不同的代码。在本项目中,我们使用条件编译为鸿蒙平台配置了专门的tabBar:

// #ifdef APP-HARMONY"tabBar":{// 鸿蒙平台特有的配置},// #endif

2. 主题变量

通过在theme.json中定义主题变量,我们可以实现统一的主题管理,并且支持浅色和深色模式:

  • tabBarColor:tabBar文字默认颜色
  • tabBarSelectedColor:tabBar文字选中颜色
  • tabBarBackgroundColor:tabBar背景颜色
  • tabBarBorderStyle:tabBar边框样式

3. 图标资源

tabBar图标资源放在static文件夹下,包括默认状态和选中状态的图标:

  • 默认图标:ic_tab_home.pngic_tab_ribao.pngic_tab_me.png
  • 选中图标:ic_tab_active_home.pngic_tab_ribao_active.pngic_tab_active_me.png

平台差异处理

鸿蒙平台

在鸿蒙平台上,uni-app x将代码编译为ArkTS,实现原生性能。我们为鸿蒙平台单独配置了tabBar,使用了直接的图标路径引用。

其他平台

在其他平台(Android、iOS、Web、小程序)上,我们使用了主题变量来引用图标路径,这样可以更方便地管理主题。

优势分析

使用uni-app x实现tabBar底部导航栏相比原生ArkUI开发有以下优势:

  1. 跨平台:一套代码可以在多个平台运行,包括鸿蒙、Android、iOS、Web和小程序
  2. 开发效率高:使用Vue语法,开发速度快,学习成本低
  3. 原生性能:编译为各平台的原生代码,性能与原生应用一致
  4. 配置简单:通过pages.json配置即可实现tabBar,无需编写复杂的原生代码
  5. 主题管理:支持通过theme.json统一管理主题,方便实现浅色/深色模式

体验与测试

不得不说,如今的uni-app x打包编译鸿蒙应用太方便了,竟不用再打开鸿蒙原生开发IDE工具devstudio来配置签名了,全部在HbuilerX的IDE中完成。且可以自动申请调试证书和自动签名,省去了其他繁琐的操作,很快可以运行在模拟器或者真机上。

本案例项目地址:https://gitcode.com/qq8864/uniappx_imovie

在这里插入图片描述


在这里插入图片描述


真机上运行效果截图:

在这里插入图片描述

总结

通过本文的介绍,我们了解了如何使用uni-app x在鸿蒙平台上实现tabBar底部导航栏。uni-app x提供了简洁的配置方式,通过pages.json和theme.json即可完成tabBar的配置,相比原生ArkUI开发更加简单高效。同时,uni-app x支持跨平台开发,一套代码可以在多个平台运行,大大提高了开发效率。

Read more

耳机阻抗与前端适配:32Ω、150Ω、300Ω 耳机的功放推力需求分析

耳机阻抗与前端适配分析 耳机阻抗(单位:欧姆,Ω)直接影响前端设备的推力需求。根据电功率公式: $$P = \frac{U^2}{R}$$ 其中$P$为功率,$U$为电压,$R$为阻抗。可知在相同电压下,阻抗越高,耳机获得的功率越小。以下是具体分析: 1. 32Ω 耳机 * 推力需求:低 * 适配设备:智能手机、普通播放器等便携设备 * 原理: 低阻抗使耳机在低电压下即可获得足够功率。例如驱动1mW功率所需电压: $$U = \sqrt{P \times R} = \sqrt{0.001 \times 32} \approx 0.18 , \text{V}$$ 普通手机输出(

Skill 构建指南:从零打造 AI 智能体扩展包

Skill 构建指南:从零打造 AI 智能体扩展包 引言 在人工智能时代,如何让智能体具备更强的专业能力和更丰富的工作流程?答案就是 Skill——一种为智能体设计的能力扩展包。本文将详细介绍如何从零开始构建符合规范的 Skill,让你的创意变成可分发的工具。 什么是 Skill? 核心定位 Skill 是被智能体加载和执行的能力扩展包,而非独立运行的应用程序。 执行模式 * Skill 在智能体的会话上下文中被动态加载 * 智能体读取 SKILL.md 的指导,调用 scripts/ 中的脚本,参考 references/ 中的文档 * Skill 的所有交互都通过智能体与用户的对话完成 Skill 提供的能力 * ✅ 专门工作流程(多步骤程序与条件逻辑) * ✅ 工具集成(文件格式与 API 的使用方式) * ✅ 领域专家知识(公司或系统特有的架构与逻辑) * ✅ 打包资源(脚本、参考、资产) Skill

传统医疗系统文档集中标准化存储和AI智能化更新路径分析

传统医疗系统文档集中标准化存储和AI智能化更新路径分析

引言 随着医疗数智化建设的深入推进,传统医疗系统如医院信息系统(HIS)、临床信息系统(CIS)、护理信息系统(NIS)、影像归档与通信系统(PACS)和实验室信息系统(LIS)已经成为了现代医疗机构不可或缺的技术基础设施。这些系统各自承担着不同的功能,共同支撑着医疗机构的日常运营和临床决策。然而,随着人工智能技术的迅猛发展和医疗数据的爆炸性增长,这些传统医疗系统面临着文档管理分散、标准化程度不足、AI应用深度有限等挑战。如何实现医疗文档的集中标准化存储,并构建有效的AI智能化更新路径,已成为当前医疗信息化建设中的核心议题。 医疗系统概述与文档管理挑战 医疗信息化系统是现代医疗机构的核心基础设施,其中HIS、CIS、NIS、PACS和LIS作为关键系统,各自承担着不同的功能,共同构成了医疗机构的数字化神经网络。这些系统不仅支撑着医院的日常运营,更是临床决策和患者照护的重要工具。然而,在数字化转型的进程中,这些系统面临着文档分散、标准化不足和智能化水平有限等挑战,亟需通过集中化、标准化和智能化的更新路径实现转型升级。 医疗系统中文档集中标准化存储的现状与挑战 在医疗信息化建

2025 最好用的 AI 工具大全推荐,看这一篇就够了!【建议保存】

2025 最好用的 AI 工具大全推荐,看这一篇就够了!【建议保存】

这一年被轰炸最多的问题是什么? 那一定是——> “大佬,这个 XXX 是用啥 AI 搞的?” “求推荐!有没有能一键搞定 XXX 的神器?” 今天我来整理一篇 AI 工具合集,是时候再来一波终极安利了。 这次,我直接按 8 大分类,把目前最顶的 AI 工具扒了个底朝天: AI 聊天、AI 搜索、AI 编程、AI 绘画、AI 音乐、AI 视频、AI 智能体、AI 数字人…… 别再去翻那些过时攻略了,看完这篇,你的效率能直接起飞! 直接上干活! AI 聊天 deepseek 2025 年 DeepSeek