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

大模型本地部署神器:llama.cpp使用介绍

大模型本地部署神器:llama.cpp使用介绍

介绍llama.cpp 本节主要介绍什么是llama.cpp,以及llama.cpp、llama、ollama的区别。同时说明一下GGUF这种模型文件格式。 什么是llama.cpp llama.cpp是一个由Georgi Gerganov开发的高性能C++库,主要目标是在各种硬件上(本地和云端)以最少的设置和最先进的性能实现大型语言模型推理。 主要特点: * 纯C/C++实现,没有任何依赖 * 对Apple Silicon(如M1/M2/M3芯片)提供一流支持 - 通过ARM NEON、Accelerate和Metal框架优化 * 支持x86架构的AVX、AVX2、AVX512和AMX指令集 * 支持1.5位、2位、3位、4位、5位、6位和8位整数量化,实现更快的推理和更低的内存使用 * 为NVIDIA GPU提供自定义CUDA内核(通过HIP支持AMD GPU,通过MUSA支持摩尔线程MTT GPU)

Windows 环境下 llama.cpp 编译 + Qwen 模型本地部署全指南

在大模型落地场景中,本地轻量化部署因低延迟、高隐私性、无需依赖云端算力等优势,成为开发者与 AI 爱好者的热门需求。本文聚焦 Windows 10/11(64 位)环境,详细拆解 llama.cpp 工具的编译流程(支持 CPU/GPU 双模式,GPU 加速需依赖 NVIDIA CUDA),并指导如何通过 modelscope 下载 GGUF 格式的 Qwen-7B-Chat 模型,最终实现模型本地启动与 API 服务搭建。 1.打开管理员权限的 PowerShell/CMD,执行以下命令克隆代码: git clone https://github.com/ggml-org/llama.cpp mkdir

VSCode + Copilot下:配置并使用 DeepSeek

以下是关于在 VSCode + Copilot 中,通过 OAI Compatible Provider for Copilot 插件配置使用 DeepSeek 系列模型 (deepseek-chat, deepseek-reasoner, deepseek-coder) 的完整汇总指南。 🎯 核心目标 通过该插件,将支持 OpenAI API 格式的第三方大模型(此处为 DeepSeek)接入 VSCode 的官方 Copilot 聊天侧边栏,实现调用。 📦 第一步:准备工作 在开始配置前,确保完成以下准备: 步骤操作说明1. 安装插件在 VSCode 扩展商店搜索并安装 OAI Compatible Provider for Copilot。这是连接 Copilot 与第三方模型的核心桥梁。2. 获取 API

【FPGA+OpenCV+C语言】:三剑合璧打造实时图像处理引擎

第一章:FPGA的C语言图像算法概述 在现代数字图像处理领域,现场可编程门阵列(FPGA)因其高度并行的硬件架构和低延迟特性,成为实现高性能图像算法的理想平台。随着高层次综合(HLS)技术的发展,开发者可以使用C或C++语言描述图像处理算法,并通过工具链自动转换为可在FPGA上运行的硬件逻辑,显著降低了硬件开发门槛。 为何选择C语言进行FPGA图像处理 * 代码可读性强,便于算法快速原型设计 * HLS工具支持标准C语法,能高效映射到硬件结构 * 便于与传统软件图像处理流程集成和验证 典型图像处理操作的C语言实现 例如,实现灰度化是图像预处理中的常见步骤,其算法将RGB三通道像素转换为单通道灰度值。以下是基于权重法的灰度转换代码示例: // 输入:width x height 的RGB图像 // 输出:对应灰度图像 void rgb_to_gray(unsigned char *rgb, unsigned char *gray, int width, int height) { for (int i = 0;