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

VS Code+GitHub Copilot避坑指南:从安装配置到最佳实践的完整手册

VS Code + GitHub Copilot 深度驾驭手册:从避坑到精通的实战心法 如果你是一名 Visual Studio Code 的用户,并且对那个传说中能“读懂你心思”的 AI 编程伙伴 GitHub Copilot 感到好奇,甚至已经跃跃欲试,那么这篇文章就是为你准备的。我们不再重复那些泛泛而谈的“AI 将改变编程”的论调,而是直接切入核心:如何在你最熟悉的 VS Code 环境中,真正驯服 Copilot,让它从一个偶尔“胡言乱语”的助手,变成你编码流中如臂使指的高效组件。我们将聚焦于从安装配置的第一分钟开始,到融入你日常工作流的每一个细节,过程中你会遇到哪些真实的“坑”,以及如何优雅地跨过它们。这不是一篇简单的功能罗列,而是一份融合了配置技巧、心智模型和实战策略的深度指南。 1. 环境搭建与初始配置:奠定高效协作的基石 在兴奋地敲下第一行代码之前,一个稳固且经过优化的起点至关重要。许多初次使用者遇到的挫折,

Llama-3.2-3B步骤详解:Ollama部署后启用GPU加速(CUDA/cuDNN)全流程

Llama-3.2-3B步骤详解:Ollama部署后启用GPU加速(CUDA/cuDNN)全流程 1. 为什么需要GPU加速?——从“能跑”到“跑得快”的关键跃迁 你可能已经用Ollama成功拉起了Llama-3.2-3B,输入几句话就能看到回复,一切看似顺利。但当你连续提问、生成稍长文本,或者尝试多轮对话时,会明显感觉到响应变慢——几秒甚至十几秒的等待,让原本流畅的交互体验打了折扣。 这不是模型能力的问题,而是默认情况下Ollama在CPU上运行。Llama-3.2-3B虽是3B参数量的轻量级模型,但其Transformer结构天然适合并行计算。一块中端消费级显卡(比如RTX 3060或更高),在GPU模式下推理速度可比CPU快3~5倍,显存占用更合理,还能释放出CPU资源去做其他事。 更重要的是,Ollama官方明确支持CUDA加速,且无需手动编译模型或修改源码。整个过程不涉及复杂配置文件编辑,也不要求你成为CUDA专家——只要你的机器有NVIDIA显卡、驱动正常、CUDA环境基础就绪,就能完成切换。本文将带你从零开始,一步步验证环境、启用加速、实测对比,并解决你最可能卡

1000多万次播放背后的AIGC方法论:从爆款视频《牌子》开始思考

这篇深度分析文章,基于《牌子》(SIGN)这部现象级AIGC短片的全面拆解,构建一套完整的AIGC内容创作方法论。将分章节系统性地展开,涵盖技术解析、创作方法论、产业影响和未来展望等多个维度。 引言:一个内容事件的诞生 2026年初,中国视频平台Bilibili上出现了一条名为《牌子》(SIGN)的7分钟短片。这部由独立创作者使用AI工具制作的奇幻短片,在一周内获得了超过1000万次播放、80多万点赞、30多万投币,被著名导演郭帆转发点赞,在YouTube上引发国际观众的热议,甚至专业影视后期团队都在上班时间逐帧分析其制作技术。 这不是一次简单的"技术展示",而是一个内容事件的诞生——它标志着AIGC(人工智能生成内容)从"实验室玩具"正式迈入"大众审美"的领域。更重要的是,它证明了一件事:在正确的创作方法论指导下,单个创作者借助AI工具,可以产出媲美专业团队的内容。 本文将从《牌子》的逐帧技术解析出发,深入探讨其背后的创作逻辑,提炼出一套可复用的AIGC内容创作方法论,

极速语音转写:Windows环境下faster-whisper全攻略(CUDA加速+PyAV依赖完美解决)

极速语音转写:Windows环境下faster-whisper全攻略(CUDA加速+PyAV依赖完美解决) 【免费下载链接】faster-whisper 项目地址: https://gitcode.com/gh_mirrors/fas/faster-whisper 前言:为什么选择faster-whisper? 你是否还在为Whisper模型的缓慢推理速度而苦恼?作为OpenAI Whisper的优化版本,faster-whisper借助CTranslate2实现了2-4倍的速度提升,同时降低了40%的内存占用。本指南专为Windows用户打造,从CUDA环境配置到PyAV依赖解决,全程实操,帮你在15分钟内搭建生产级语音转写系统。 读完本文你将获得: * 适配Windows的CUDA 12环境配置方案 * PyAV依赖免编译安装技巧 * 常见错误解决方案与性能调优指南 * 完整的命令行与Python API调用示例 一、环境准备:硬件与系统要求 1.1 硬件要求 组件最低配置推荐配置GPUNVIDIA GTX 1050Ti (4GB)NVIDIA RT