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

FPGA毕设从入门到实践:选题避坑、开发流程与Verilog实战指南

最近在帮学弟学妹们看FPGA毕业设计,发现大家踩的坑都出奇地一致:仿真波形看着挺美,一下载到板子就“沉默是金”;或者功能勉强能跑,但时序报告一堆红色警告,心里直发虚。今天我就结合自己的经验,系统梳理一下FPGA毕设从选题到上板的完整流程,希望能帮你避开那些“前辈们”用头发换来的教训。 一、FPGA毕设那些“经典”的坑 毕业设计时间紧、任务重,很多问题如果前期没意识到,后期调试会非常痛苦。下面这几个是高频雷区: 1. 仿真与现实的“壁”:这是最常见的问题。Testbench里时钟是理想的,复位是干净的,但板子上有晶振抖动、按键消抖、电源噪声。仿真通过的UART收发,上板后可能因为波特率误差累积而错码。关键:仿真要加入时钟抖动(#(CLK_PERIOD/10))和复位异步释放的模型,尽量逼近真实环境。 2. 时钟域的“混战”:一个工程里用了板载50MHz时钟,又通过PLL生成125MHz给DDR控制器,还接了个外部异步的传感器数据。如果不同时钟域的信号直接通信,没有经过同步器(如两级触发器),亚稳态就会导致数据采样错误,

By Ne0inhk

QGroundControl终极安装教程:从零开始快速搭建无人机地面站

QGroundControl终极安装教程:从零开始快速搭建无人机地面站 【免费下载链接】qgroundcontrolCross-platform ground control station for drones (Android, iOS, Mac OS, Linux, Windows) 项目地址: https://gitcode.com/gh_mirrors/qg/qgroundcontrol QGroundControl是一款功能强大的跨平台无人机地面站软件,支持Windows、macOS、Linux和Android系统。本文为您提供完整的QGroundControl安装指南,帮助您快速部署这款专业的飞行控制平台。 🚀 准备环境:确保系统兼容性 在开始安装前,请确认您的设备满足以下基本要求: * 操作系统:Windows 10/11、macOS 10.14+、Ubuntu 18.04+ 或 Android 9+ * 处理器:Intel i5或同等级以上CPU * 内存:

By Ne0inhk

openclaw飞书机器人权限管理

为了确保 OpenClaw 既能顺畅运行,又不至于因权限过大导致安全隐患,建议在飞书开发者后台 - 权限管理中,按照以下清单进行勾选。 这份清单分为基础必备和进阶功能两部分: 1. 基础必备权限(无论个人还是团队,必须开启) 这些权限保证机器人能“听到”指令并“开口”说话: * im:message:p2p_msg:readonly (接收单聊消息) —— 允许机器人和你 1 对 1 聊天。 * im:message:group_at_msg:readonly (接收群聊中@机器人的消息) —— 团队场景下,机器人只响应被 @ 的内容,保护群隐私。 * im:message.p2p_msg:send (发送单聊消息) —— 机器人回复你的基础。 * im:message.

By Ne0inhk
【机器人】复现 RoboBrain2.0 具身大脑模型 | 统一感知、推理和规划能力

【机器人】复现 RoboBrain2.0 具身大脑模型 | 统一感知、推理和规划能力

RoboBrain 2.0是一个机器人的具身大脑模型,具备统一感知、推理和规划能力; 同时适应对物理环境中复杂的具身任务; 它提供不同版本:轻量级的3B、7B模型和全尺寸的 32B 模型,包含视觉编码器和语言模型。 代码地址:https://github.com/FlagOpen/RoboBrain2.0 论文地址:RoboBrain 2.0 Technical Report 目录 快速了解模型 1、创建Conda环境 2、安装依赖库 3、安装torch 4、模型推理 示例1:图文问答,使用RoboBrain2.0-7B模型,不开思考模式 示例2:图文问答,使用RoboBrain2.0-7B模型,开启思考模式 示例3:图文问答,使用RoboBrain2.0-3B模型 示例4:

By Ne0inhk