HarmonyOS元服务开发实践:桌面卡片字典

一、项目说明
1.DEMO创意为卡片字典。
2.不同卡片显示不同内容:微卡、小卡、中卡、大卡,根据不同卡片特征显示同一个字的不同内容,基于用户习惯可选择喜欢的卡片。
3.万能卡片刷新:用户点击卡片刷新按钮查看新内容,同时卡片设置了定时刷新,让用户每天看到的卡片都是新的文字,便于用户学习和查阅。
4.元服务内具有搜索功能,用户可以通过搜索查询相应的字和解释,采用了类似现在用户习惯的上下滑动方式来进行逐字详细阐述。
5.基于API9、ArkTS语言开发,通过serverless云服务实现注册、登录等功能。
二、元服务效果
1.万能卡片效果

 

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区

2.元服务内页
 

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区


三、项目开发
1.环境搭建
软件要求:
DevEco Studio版本:DevEco Studio 3.1 Release及以上版本。
HarmonyOS SDK版本:API version 9及以上版本。
硬件要求:
设备类型:华为手机或运行在DevEco Studio上的华为手机设备模拟器。
HarmonyOS系统:3.1.0 Developer Release及以上版本。

2.主要代码结构解读
 

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区


entry/src/main/ets: 文件入口
common:公共资源文件
images:公共图片资源
Constants.ts:公共常量
CountryViewModel.ts:国家号码类
LazyFE_Class.ets:懒数据加载类
Log.ts:日志类

components:封装组件文件

database:数据库封装类
data_cyhz.ets:数据文件

entryability:应用/服务入口

entryformability:卡片服务

pages:应用/服务页面
Auth.ets:认证授权
CloudFunction.ets:云函数
CloudProject.ets:云项目
CloudStorage.ets:云存储
Index.ets:主页
User_Login.ets:登录页
User_SignUp.ets:注册页
User_VerifyCodeLogin.ets:验证码登录页

services:后台操作类

widget:服务卡片

resources:资源文件目录

3.进入应用说明
由于创建的是云模板项目,所以无需额外配置SDK依赖,只需要注意的是,云模板的初始集成sdk位置不一样,所以我们还是在应用初始化阶段使用context初始化SDK,推荐在entryability的onCreate中进行。
 

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区


4.首页
我们需要给应用添加底部菜单栏,用于切换不同的应用模块,由于各个模块之间属于完全独立的情况,并且不需要每次切换都进行界面的刷新,所以我们用到了Tabs,TabContent组件。
 

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区


本应用一共有首页、我的两个模块,分别对应Tabs组件的两个子组件TabContent。

首页包含搜索文字和滑动浏览信息两个模块,具体代码实现我们将在下边分模块进行说明。

搜索文字:主要用到Search组件,通过搜索文字来跳转到相应的文字展示信息,主要代码如下:

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区

...
//常用汉字搜索栏
Column() {Search({ value: this.submitValue, placeholder: '汉字搜索', controller: this.search }).searchButton('搜索').placeholderColor(Color.Grey).textFont({ size: 14, weight: 400 }).margin({ left: 20, right: 20 }).onSubmit((value: string) => {this.submitValue = valuefor (let i = 0; i < wz.length; i++) {const element: any = wz[i];if (this.submitValue == element.zi) {this.swiperIndex = ithis.submitValue = ''}}}).onChange((value: string) => {this.changeValue = value})
}.width("100%").margin({ top: 20, bottom: 20 })
......

浏览信息模块:主要用到swiper组件,通过数据的懒加载行为,来预缓存数据,通过滑动页面来展示文字信息,主要代码如下:

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区

...//常用汉字轮播部分
Column() {Swiper(this.swiperController) {LazyForEach(this.data_wz, (item: any) => {Column() {...}.width("100%").height("100%").justifyContent(FlexAlign.Start).alignItems(HorizontalAlign.Start)}, item => item)}.vertical(true).cachedCount(2).autoPlay(false).indicator(false).loop(false).duration(400).itemSpace(0).curve(Curve.Linear).cachedCount(3).index(this.swiperIndex).disableSwipe(this.disableSwipe).onChange((index: number) => {console.info("swiper:" + index.toString())this.swiperIndex = index})
}.width("100%")...

5.我的
我的页包含游客登陆、用户登录两个模块。
其中游客登陆不显示登录信息以及应用部分功能,仅能使用部分应用能力;
用户登录显示用户部分信息,并展开应用所有功能,需要用户注册登录;
具体代码实现我们将在下边分模块进行说明。

游客登录:

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区

...//游客登陆状态
if (this.isVisitor) {//头像信息Column() {Image($r('app.media.icon')).width(90).objectFit(ImageFit.Contain).borderRadius(50)Text(this.isVisitor ? "游客_" : this.userName).fontSize(16).margin(20)Button(this.isLogin ? "退出" : "登录", { type: ButtonType.Capsule }).fontSize(14).width('120').height('30').backgroundColor(0xf48fb1).onClick(() => {router.replaceUrl({url: "pages/User_Login"})})}.width('90%').height('240').borderRadius(12).margin({ top: 20 }).backgroundColor(0xFFFFFF).shadow({ radius: 12, color: 0xCECECE, offsetX: 4, offsetY: 6 }).justifyContent(FlexAlign.Center)
}...

用户登录:

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区

...//已经登陆状态if (!this.isVisitor) {//头像信息Column() {
...}.width('90%').height('240').borderRadius(12).margin({ top: 20 }).backgroundColor(0xFFFFFF).shadow({ radius: 12, color: 0xCECECE, offsetX: 4, offsetY: 6 }).justifyContent(FlexAlign.Center)//选择项Column() {...
}.width('100%')
.height("100%")
.backgroundColor(0xF5F5F5)
.justifyContent(FlexAlign.Start)

6.注册登录页
让用户进行账号注册,能够完全使用应用。
 

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区


 

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区


核心代码:

....onClick(() => {if (this.phoneNumber !== '' && this.password !== '') {let verifyCodeSettings = new VerifyCodeSettingBuilder().setAction(VerifyCodeAction.REGISTER_LOGIN).setLang('zh_CN').setSendInterval(60).build();agconnect.auth().requestPhoneVerifyCode(this.countryCode, this.phoneNumber, verifyCodeSettings).then(verifyCodeResult => {this.startTimer()//验证码申请成功}).catch(error => {//验证码申请失败Prompt.showToast({ message: "请输入正确的手机号和密码" + JSON.stringify(error) })});}else {Prompt.showToast({ message: "手机号和密码不能为空" })}
})......
.......onClick(() => {if (this.phoneNumber !== '' && this.password !== '') {let user = new PhoneUserBuilder().setCountryCode(this.countryCode).setPhoneNumber(this.phoneNumber).setPassword(this.password) //可以给用户设置初始密码。填写后后续可以用密码来登录.setVerifyCode(this.VerifyCode).build();agconnect.auth().createPhoneUser(user).then(result => {// 创建用户成功AppStorage.Set('phoneNumber', user.phoneNumber)AppStorage.Set('password', user.password)AppStorage.Set('isVisitor', false)AppStorage.Set('isLogin', true)AppStorage.Set('userName', user.phoneNumber)router.pushUrl({url: "pages/Index"})}).catch(error => {// 创建用户失败Prompt.showToast({ message: "注册失败," + JSON.stringify(error),duration:4 })})} else {Prompt.showToast({ message: "手机号和密码不能为空" })}
})

7.其他云服务
说明:这是云模板初始业务,如有其他业务需求,可自行添加。
 

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区


四、卡片开发
按需求添加卡片,也可以只用初始创建卡片,修改相关卡片参数即可。

1.创建卡片
 

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区


2.初始卡片修改相关参数
打开resources/base/profile目录下的form_config.json文件,按需修改参数
 

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区


3.卡片加载与获取数据

卡片加载更新部分由EntryFormAbility.ts文件完成,这里可参考官方文档操作即可。

由于没有连接到后台数据部分,所以我们这里采用自定义模拟数据,然后在每次卡片挂载到桌面时,随机选取卡片内容,代码如下:
 

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区

...
aboutToAppear() {let idx = Math.floor((Math.random() * wz_arr.length))this.zi = wz_arr[idx].zithis.pinYin = wz_arr[idx].pinYinthis.buShou = wz_arr[idx].buShouthis.biHua = wz_arr[idx].biHuathis.fanTi = wz_arr[idx].fanTithis.near_words = wz_arr[idx].near_wordsthis.reverse_words = wz_arr[idx].reverse_wordsthis.explain = wz_arr[idx].explain.toString()
}...

4.卡片主要代码

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区

...Column() {//微卡Stack() {Text(this.zi).width("100%").textAlign(TextAlign.Center).fontSize(30).fontColor('#1f1f1f').fontWeight(600).margin({right:20})Row(){Image("/common/images/R2.png").width(18).height(18).margin({right:"15%"}).objectRepeat(ImageRepeat.NoRepeat).onClick(()=>{this.rotateAngle = 180this.aboutToAppear()}).rotate({ angle: this.rotateAngle }).animation({duration:300,curve: Curve.Linear,playMode: PlayMode.Normal})}.width("100%").justifyContent(FlexAlign.End)}.width("100%").height(72)//小卡、中卡Flex({direction:FlexDirection.Column,wrap:FlexWrap.Wrap,justifyContent:FlexAlign.Start}){Column(){Text("拼音:"+this.pinYin).fontSize(14).margin({left:15})Text("部首:"+this.buShou).fontSize(14).margin({top:4,left:15})Text("笔画:"+this.biHua).fontSize(14).margin({top:4,left:15})Text("繁体:"+this.fanTi).fontSize(14).margin({top:4,left:15})}.width(208).justifyContent(FlexAlign.Start).alignItems(HorizontalAlign.Start)Column(){Text("近义词:"+this.near_words).fontSize(12).margin({right:15})Text("反义词:"+this.reverse_words).fontSize(12).margin({top:4,right:15})}.justifyContent(FlexAlign.Start).alignItems(HorizontalAlign.Start)}.width("100%").height(102)//大卡Column(){Text("解释:").width("100%").textAlign(TextAlign.Start).fontSize(12).margin({left:15,right:15})Text(this.explain).fontSize(14).margin({top:4,left:15,right:15})}.width("100%").height("100%").justifyContent(FlexAlign.Start).alignItems(HorizontalAlign.Start)
}
.width("100%")
.alignItems(HorizontalAlign.Center)
.backgroundImage("/common/images/cywz.jpg")
.backgroundImageSize(ImageSize.Cover)
.onClick(() => {postCardAction(this, {"action": this.ACTION_TYPE,"abilityName": this.ABILITY_NAME,"params": {"message": this.MESSAGE,}});
})...

五、项目运行
 

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区


六、结语
各位感兴趣的开发者可以点击进入元服务官网,详细了解元服务、万能卡片相关信息。大家还可以在华为手机的负一屏、华为应用市场元服务专区体验本文作者及团队已经上架运营的元服务-成语心情,用万能卡片按照自己的心情来刷刷成语吧。

HarmonyOS元服务开发实践:桌面卡片字典-开源基础软件社区

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.rhkb.cn/news/80613.html

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Windows环境下Node.js二进制版安装教程

文章目录 前言一 下载Node.js二 设置环境变量三 配置全局安装和缓存路径四 设置仓库 前言 新版的Node.js已自带npm&#xff0c;就在Node.js下载完成解压后的文件内&#xff0c;的node_modules包中。 npm的作用&#xff1a;是对Node.js依赖的包进行管理&#xff0c;类似maven。…

通信行业实操技巧,让你的基站无人能及!

当今社会&#xff0c;通信网络已经成为人们生活和工作中不可或缺的一部分&#xff0c;而电信基站作为这一网络的支撑和枢纽&#xff0c;扮演着至关重要的角色。 因此&#xff0c;精密空调监控在现代通信基站的运维中具有重要意义&#xff0c;为通信技术的发展和进步提供了有力支…

现代C++中的从头开始深度学习:【4/8】梯度下降

一、说明 在本系列中&#xff0c;我们将学习如何仅使用普通和现代C编写必须知道的深度学习算法&#xff0c;例如卷积、反向传播、激活函数、优化器、深度神经网络等。 在这个故事中&#xff0c;我们将通过引入梯度下降算法来介绍数据中 2D 卷积核的拟合。我们将使用卷积和上一个…

基于Byzer-LLM和ChatGLM-6B快速搭建一款免费的语言大模型助力电商企业

假设有一家电商企业&#xff0c;员工大概20-30人&#xff0c;企业是在淘宝等电商平台买衣服&#xff0c;目前在淘宝上已经上架十万种服饰, 之前淘宝限制服饰的标题描述字数&#xff0c;所以写的特别精简。以该公司售卖的阔腿裤为例&#xff0c;目前标题都是这样的&#xff1a; …

云道资本:2023中国氢能源产业-氢制备深度研究报告(附下载)

关于报告的所有内容&#xff0c;公众【营销人星球】获取下载查看 核心观点 中国可再生能源消纳能力提升远远滞后于发电占比的提升。大规模的可再生能源发电是实现碳中和的关键一步&#xff0c;但风电、光伏发电间歌性、波动性强&#xff0c;电网消纳压力较大&#xff0c;且电…

十三、高光谱图像基础

1、各种图像 1.1 高光谱图像 高光谱成像技术的原理基于物体的光谱吸收和反射特性。当光线通过或反射于物体表面时,被物体吸收或反射的光波将发生变化。高光谱成像系统通过对各个波段的频谱进行连续测量,可以获取到物体在不同波段下的光谱信息。通过分析这些光谱数据,我们…

/lib/x86_64-linux-gnu/libc.so.6: version `GLIBC_2.28‘ not found

某项目中&#xff0c;我要给别人封装一个深度学习算法的SDK接口&#xff0c;运行在RK3588平台上&#xff0c;然后客户给我的交叉编译工具链是 然后我用他们给我的交叉编译工具链报下面的错误&#xff1a; aarch64-buildroot-linux-gnu-gcc --version /data/chw/aarch64/bin/cca…

Verilog求log10和log2近似

Verilog求log10和log2近似 Verilog求10对数近似方法&#xff0c;整数部分用位置index代替&#xff0c;小数部分用查找表实现 参考&#xff1a; Verilog写一个对数计算模块Log2(x) FPGA实现对数log2和10*log10

ArcGIS在洪水灾害普查、风险评估及淹没制图中应用教程

详情点击链接&#xff1a;ArcGIS在洪水灾害普查、风险评估及淹没制图中应用教程 一&#xff1a;洪水普查技术规范 1.1 全国水旱灾害风险普查实施方案 1.2 洪水风险区划及防治区划编制技术要求 1.3 山丘区中小河流洪水淹没图编制技术要求 二&#xff1a;ArcGIS及数据管理 …

python爬虫之scrapy框架介绍

一、Scrapy框架简介 Scrapy 是一个开源的 Python 库和框架&#xff0c;用于从网站上提取数据。它为自从网站爬取数据而设计&#xff0c;也可以用于数据挖掘和信息处理。Scrapy 可以从互联网上自动爬取数据&#xff0c;并将其存储在本地或在 Internet 上进行处理。Scrapy 的目标…

Demystifying Prompts in Language Models via Perplexity Estimation

Demystifying Prompts in Language Models via Perplexity Estimation 原文链接 Gonen H, Iyer S, Blevins T, et al. Demystifying prompts in language models via perplexity estimation[J]. arXiv preprint arXiv:2212.04037, 2022. 简单来说就是作者通过在不同LLM和不同…

HTML5 Canvas和Svg:哪个简单且好用?

HTML5 Canvas 和 SVG 都是基于标准的 HTML5 技术&#xff0c;可用于创建令人惊叹的图形和视觉体验。 首先&#xff0c;让我们花几句话介绍HTML5 Canvas和SVG。 什么是Canvas? Canvas&#xff08;通过 标签使用&#xff09;是一个 HTML 元素&#xff0c;用于在用户计算机屏幕…

基于EIoT能源物联网的工厂智能照明系统应用改造-安科瑞黄安南

【摘要】&#xff1a;随着物联网技术的发展&#xff0c;许多场所针对照明合理应用物联网照明系统&#xff0c;照明作为工厂的重要能耗之一&#xff0c;工厂的照明智能化控制&#xff0c;如何优化控制、提高能源的利用率&#xff0c;达到节约能源的目的。将互联网的技术应用到工…

如何离线安装ModHeader - Modify HTTP headers Chrome插件?

如何离线安装ModHeader - Modify HTTP headers Chrome插件&#xff1f; 1.1 前言1.2 打开Chrome浏览器的开发者模式1.3 下载并解压打包好的插件1.4 解压下载好的压缩包1.5 加载插件1.6 如何使用插件? 1.1 前言 ModHeader 是一个非常好用的Chrome浏览器插件&#xff0c;可以用…

并发——线程与进程的关系,区别及优缺点?

文章目录 1. 图解进程和线程的关系2.程序计数器为什么是私有的?3. 虚拟机栈和本地方法栈为什么是私有的?4. 一句话简单了解堆和方法区5. 说说并发与并行的区别? 从 JVM 角度说进程和线程之间的关系 1. 图解进程和线程的关系 下图是 Java 内存区域&#xff0c;通过下图我们…

Uniapp基于微信小程序以及web端文件、图片下载,带在线文件测试地址

一、效果 传送门 二、UI视图 <scroll-view scroll-x="true" scroll-y="true" :style

python数据分析报告 范文,python数据分析报告+代码

大家好&#xff0c;本文将围绕python数据分析期末大作业报告展开说明&#xff0c;python数据分析期末大作业是一个很多人都想弄明白的事情&#xff0c;想搞清楚python数据分析报告怎么写需要先了解以下几个事情。 背景 虽然用Python开发爬虫脚本&#xff0c;顺利把某房产网站的…

国产水声功率放大器ATA-L50在水下通信领域中的应用

水下通信是指在水下环境中进行信息交流和传递的技术。由于水下环境的特殊性&#xff0c;水下通信面临着诸多挑战&#xff0c;如水压、水体的吸收和散射等。然而&#xff0c;随着科技的发展&#xff0c;水下通信技术已经取得了长足的进步&#xff0c;并广泛应用于海洋资源开发、…

鉴源实验室丨汽车网络安全攻击实例解析(二)

作者 | 田铮 上海控安可信软件创新研究院项目经理 来源 | 鉴源实验室 社群 | 添加微信号“TICPShanghai”加入“上海控安51fusa安全社区” 引言&#xff1a;汽车信息安全事件频发使得汽车行业安全态势愈发紧张。这些汽车网络安全攻击事件&#xff0c;轻则给企业产品发布及产品…

Mageia 9 RC1 正式发布,Mandriva Linux 发行版的社区分支

导读Mageia 9 首个 RC 已发布。公告写道&#xff0c;自 2023 年 5 月发布 beta 2 以来&#xff0c;Mageia 团队一直致力于解决许多顽固问题并提供安全修复和新特性。 新版本的控制中心添加了用于删除旧内核的新功能&#xff0c;该功能在 Mageia 9 中默认自动启用&#xff0c;用…