鸿蒙项目云捐助第六讲鸿蒙App应用的首页导航资讯推荐功能的实现

news2024/12/16 11:13:40

鸿蒙项目云捐助第六讲鸿蒙App应用的首页导航资讯推荐功能的实现

前面的教程中已实现了启动页,登录页,注册页及首页的部分功能。这里有一些朋友提出问题,如何设置登录页面的背景图片。这里稍带说一个这个功能的实现。

一、登录页面的背景图片实现

###首先需要具有一张登录背景的图片,这里也是通过百度搜索,找到一幅山水画,如下图所示。

这里选择一幅山水画放在鸿蒙Next项目resources目录下的media目录下。如下图所示。

这里的背景图命名为bj.png,把这张图做为背景图只需要把布局文件中最外层的元素设置backgroundImage属性方法即可,同时也需要注意图片与背景的尺寸调整,可以使用backgroundImageSize来调整尺寸。代码如下图所示。

这里的图片背景尺寸backgroundImageSize设置为ImageSize.Fill进行充满整个背景。

当属性设置后,在预览中看到的效果图如下图所示。

当然,如果你的图片比较小,也可以设置背景图片的重复,这里使用backgroundImage后面跟上参数ImageRepeat,根据重复的X轴和Y轴设定重复的具体效果。代码修改如下图所示。

接下来,继续回入正题,这里进行首页中其它功能模块的布局。

根据首页布局的模板图片,如下图所示。

这里需要继续实现分类导航的功能,也就是横排的每一个小图标排列成的5*5的矩阵方格。

二、分类导航的布局

首先也是准备一个分类导航的icon图标,可以从“百度图库”中搜索相应的图标。如下图所示。

这里可以从“百度图库”中下载8个图标文件,然后把下载的文件拷贝到resources目录下的base目录下的media文件夹中。如下图所示。

这里的图片采用heart+数字的命名方式,罗列了8个不同名字的图标文件。

接下来回到分类导航应该存在页面中,这个分类导航应该放在首页中,因此这里打开的是component目录下的IndexComponent组件。如下图所示。

这里写分类导航也是使有Flex的弹性盒子,把这个Flex写在Swiper滑动轮播组件的下面。如下图所示。

接下来需要在这个Flex的组件中显示8个元素的图片和文字的组合,这里也有一个图标和文字的对应关系,一般两值对应可以采用json值对的数据结构进行保存,在这个文件中引入json数据,由于这个数据是固定的分类,因此是一个常量,鸿蒙Next中的常量使用const来定义。在IndexComponent组件中引入分类导航的数据。如下图所示。

引数据后,在编辑器中显示红色的波浪线, 在鸿蒙Next的开发过程中,DevEco Studio工具会把报错部分划成红色的波浪线.这里引入const的常量后报错,证明不支持这种引用方式,这里采用另外一种导出数据的方式。在鸿蒙Next目录下建立mockjs的文件夹,其目的是为了模拟数据,在后期结合华为云进行开发时,可以把这部分数据注释掉。这里先完成mockjs文件夹的建立,如下图所示。

这里entry入口文件夹的ets目录上右键,然后选择“New”--->“Directionary”,并把这个文件夹命令为mockjs,也就是建立一个mockjs的模拟数据文件夹。接下来在这个文件夹下建立一个分类数据的js文件,其命名为catgory_data.js文件,如下图所示。

这里就在mockjs中建立category_data.js文件,然后把const常量定义的代码放入其中,这里从文字和图片上把捐助的项目分为慈善捐助、爱佑新生、公益捐助、助学圆梦、扶老助残、慈善军营、免费捐助、突发事件等分类。

现在需要在代码的最后加入export default语句,将这个变量导出。如下图所示。

这里就是通过export default导出一个category的分类数据。

数据导出成功后,在IndexComponent中引入这个数据就可以实现数据的调用。引用方法如下图所示。

导入数据后,由于这个数据是一个值对组成的数组结构,也就是分类导航的数据列表,鸿蒙Next提供了ForEach结构遍历这个数据,然后在ForEach的循环体中可以使用UI组件进行布局。ForEach结构如下。

ForEach(
    arr: Array,
    itemGenerator: (item: Object, index: number) => void,
    keyGenerator?: (item: Object, index: number) => string
    )
arr表示数据源,为Array类型的数组。
itemGenerator表示组件生成函数。为数组中的每个元素创建对应的组件。
keyGenerator表示键值生成函数。为数据源arr的每个数组项生成唯一且持久的键值。函数返回值为开发者自定义的键值生成规则。

这里使用这个结构遍历导入的category_data的分类数据,在ForEach的循环体中进行布局设计,代码如下图所示。

###图中使用ForEach时后面的遍历项item有红色波浪线,这是鸿蒙Next对数据类型比较严格,需要指明item的数据类型,item的数据类型就是遍历出来的分类导航数据的结构,因此这里需要定义一个导航数据结构的鸿蒙类。这里可以在ets中右键,选择创建数据模型的文件夹data,创建后建立MyCategory.ets的鸿蒙类文件,在这个类文件中有icon表示图标,有mytxt表示图标下面的文本。代码如下图所示。

这里的鸿蒙类文件中有两个属性,icon和mytxt,需要注意的是,在这个类文件中必须有constrcutor的构造函数,并把这两个属性填入其中做为参数,在constrcutor的构造函数体中把当前的全局变量赋值给局部变量。

鸿蒙分类导航类MyCategory创建成功后,可以在ForEach的item后面指明循环的数据类型,这里就不会报错了。代码如下图所示。

代码中在Flex后面加入了{wrap:FlexWrap.Wrap}的换行处理,表示指定宽度中如果不能显示所有的图标,图标会自动切换成两行或者多行。在Flex的元素中只有一个孩子元素就是Column(),表示分类导航每一个子项都是竖向列式排列,在列多排列中首先需要有一个Image的组件。这个组件暂时指定了width宽度和height高度。不过如果图片过大,也需要图片的等比例缩放。这时布局中Image的属性方法修改代码如下图所示。

这里为Image图片组件引入了aspectRatio表示等比例缩放,其值为1表示缩放度为1,然后后面有borderRadius进行圆角处理,这里圆角的幅度比较大,是为了构建一个圆形的效果。Image组件的下面是Text的分类导航的分类文本显示。这里需要查看预览效果的话,需要到index.ets文件中进行预览,因为IndexComponent是index.ets的子组件,在IndexComponent中没有@Entry的注解说明。打开index.ets文件后得到的预览结果图如下所示。

分类导航布局成功后,继续进行下面的资讯类部分设置。效果如下图所示。

三、首页资讯类容的布局

首页中资讯类的布局也需要先收集图片的素材,继续从“百度图库”中搜索资讯类的图标。如下图所示。

收集图标后,需要把图标文件还是存放在resources文件夹下base目录中的media文件夹下,如下图所示。

这里引入了资讯类的4个图标文件。由于资讯类的布局也是由图标和文字两部组成的,这里还需要模拟相关的资讯类数据,在之前建立的mockjs文件夹下建立一个资讯类的文件new.js。如下图所示。

这里指明的是模拟数据的目录mockjs,在其中建立的new.js的代码如下图所示。

这里建立了一个数组数据news,数据中提供了icon图标,mytitle主标题,mysubtitle副标题的三个json数据结构。由于这里显示了3个属性的数据,就需要对应的鸿蒙数据类与之对应,这个鸿蒙数据类也需要有三个属性, icon图标,mytitle主标题, mysubtitle副标题。代码如下图所示。

注意,这里的构造函数也需要传入三个参数,否则会报错,同时三个属性的名称需要与模拟数据的三个属性同名。

接下来继续在IndexComponent组件中导入已经建好的资讯数据,代码如下图所示。

导入数据成功后,资讯类的布局也可以通过ForEach循环来进行布局,在布局时分析一下资讯类的每一个资讯项的布局特点,如下图所示。

根据这样的布局思想及ForEach的使用方法结合起来,可以得到资讯的布局代码如下图所示。

这里最外层仍然使用Flex进行弹性盒子的布局,也设置了弹性盒子的{wrap:FlexWrap.Wrap}属性,当资讯类模块的长度超出屏幕长度时会自动换行处理。在Flex弹性盒子里面进行ForEach的循环布局,循环中的每一个元素item其类型为创建的鸿蒙资讯类MyNews,在ForEach的循环体内,整体是一个Column()的竖向排列,也就是每一个资讯类项目竖向排列,在每一个资讯类模块中先进行Row()的横向排列,把图标和文字放在一行来处理,文字有主标题和副标题,使用Column()的竖向排列把主标题和副标题排列起来。另外对于Image设置辅助的属性方法width宽度和height高度,对于Text文字类组件设置fontSize字体大小及fontWeight是否加粗等属性方法。

这样在预览中得到的资讯类模块布局如下图所示。

这样首页就布局成功了轮播功能,分类导航功能及最新资讯功能,后面持续完成首页、捐助页等相关的功能页面,请持续关注。

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SpringCloud微服务实战系列:03spring-cloud-gateway业务网关灰度发布

目录 spring-cloud-gateway 和zuul spring webflux 和 spring mvc spring-cloud-gateway 的两种模式 spring-cloud-gateway server 模式下配置说明 grayLb://system-server 灰度发布代码实现 spring-cloud-gateway 和zuul zuul 是spring全家桶的第一代网关组件&#x…

【蓝桥杯每日一题】推导部分和——带权并查集

推导部分和 2024-12-11 蓝桥杯每日一题 推导部分和 带权并查集 题目大意 对于一个长度为 ( N ) 的整数数列 A 1 , A 2 , ⋯ , A N A_1, A_2, \cdots, A_N A1​,A2​,⋯,AN​ ,小蓝想知道下标 ( l ) 到 ( r ) 的部分和 ∑ i l r A i A l A l 1 ⋯ A r \sum_{…

[代码随想录17]二叉树之最大二叉树、合并二叉树、二搜索树中的搜索、验证二叉搜索树。

前言 二叉树的题目还是要会一流程构造函数之类的。其中还有回溯的思想 题目链接 654. 最大二叉树 - 力扣(LeetCode) 一、最大二叉树 思路:还是考察构造二叉树,简单来说就是给你一个数组去构建一个二叉树,递归来解决就…

让 Win10 上网本 Debug 模式 QUDPSocket 信号槽 收发不丢包的方法总结

在前两篇文章里,我们探讨了不少UDP丢包的解决方案。经过几年的摸索测试,其实方法非常简单, 无需修改代码。 1. Windows 下设置UDP缓存 这个方法可以一劳永逸解决UDP的收发丢包问题,只要添加注册表项目并重启即可。即使用Qt的信号与槽&#…

水凝胶微机器人:复杂体内环境的“导航高手”

大家好!今天来了解一项关于成像引导的生物可吸收声学水凝胶微型机器人(BAM)的研究——《Imaging-guided bioresorbable acoustic hydrogel microrobots》发表于《SCIENCE ROBOTICS》。这项研究为生物医学工程领域带来了新的突破,有…

噪杂环境(房车改装市场)离线语音通断器模块

一直在坚持,却很难有机会上热门,在现在这个以流量为导向的时代,貌似很难靠所谓的坚守和热爱把产品成功的推向市场了。目前的客户仍然是以老客户为主,应用场景主要是房车改装,根据九客户的需求定制化一些模块。因为没有…

Liinux下VMware Workstation Pro的安装,建议安装最新版本17.61

建议安装最新版本17.61,否则可能有兼容性问题 下载VMware Workstation安装软件 从官网网站下载 https://support.broadcom.com/group/ecx/productdownloads?subfamilyVMwareWorkstationPro 选择所需版本 现在最新版本是17.61,否则可能有兼容性问题…

数据结构速成

1. 数据结构与算法 2. 顺序表 3. 链表 4. 栈与队列 5. 串 6. 树与二叉树(1) 7. 树与二叉树(2) 8. 图 9. 图的应用 10. 查找 11. 排序(1) 12. 排序(2)

巅峰极客2024

Misc Misc题搞得有点像re病毒分析,不过misc成分还是比较高 源文件有upx壳,脱完了获得的程序沙箱跑不出来 IDA分析一下发现有虚拟机检测,所以只能在本地运行 运行后释放了两个文件 图片其实在释放程序中能找到 file文件上传沙箱后显示是木马…

gorm源码解析(二):核心设计与初始化

文章目录 前言基本使用初始化db实例定义model增删改查 数据结构gorm.DBStatementSchema元数据clone 初始化初始化DB初始化dialector用dialector初始化db注册crud函数执行器processor注册callback Clause抽象解析元数据解析schema解析field 总结 前言 上一篇文章介绍了什么是OR…

科研绘图系列:R语言绘制网络图和密度分布图(network density plot)

禁止商业或二改转载,仅供自学使用,侵权必究,如需截取部分内容请后台联系作者! 文章目录 介绍加载R包数据下载图1图2图3图4图5图6图7图8系统信息参考介绍 R语言绘制网络图和密度分布图(network & density plot) 加载R包 library(magrittr) library(dplyr) library(…

CSS学习第二天

HTML文本颜色 颜色属性被用来设置文字的颜色,颜色通过css最经常的指定: #FF000;RGB(255,0,0);颜色的名称red 一个网页的背景颜色是指在主体内的选择 文本的对齐方式 文本排列属性是…

springboot437校园悬赏任务平台(论文+源码)_kaic

摘 要 使用旧方法对校园悬赏任务平台的信息进行系统化管理已经不再让人们信赖了,把现在的网络信息技术运用在校园悬赏任务平台的管理上面可以解决许多信息管理上面的难题,比如处理数据时间很长,数据存在错误不能及时纠正等问题。这次开发的校…

医学分割数据集白内障严重程度分割数据集labelme格式719张3类别

数据集格式:labelme格式(不包含mask文件,仅仅包含jpg图片和对应的json文件) 图片数量(jpg文件个数):719 标注数量(json文件个数):719 标注类别数:3 标注类别名称:["normal","severe","mi…

搭建Tomcat(二)--反射的应用

引入 Tomcat 在处理HTTP请求时,会根据一系列规则和配置来判断该请求是想要获取动态资源还是静态资源。 为什么要对请求进行判断? Tomcat 判断HTTP请求是动态请求还是静态请求的主要目的是确定如何生成并返回响应内容。静态请求通常意味着服务器只需读取并…

电子科技大学考研,计算机与软件专业怎么选择?

电子科技大学在计算机与软件领域具备卓越实力,其毕业生就业前景及薪资水平均颇为可观。因此,学生应依据个人课程专长来选定专业。若各项课程均表现出色,推荐25届考生优先考虑软件专业,因其上岸难度相对较低。 接下来,C…

部署GitLab服务器

文章目录 环境准备GitLab部署GitLab服务器GitLab中主要的概念客户端上传代码到gitlab服务器CI-CD概述软件程序上线流程安装Jenkins服务器 配置jenkins软件版本管理配置jenkins访问gitlab远程仓库下载到子目录部署代码到web服务器自动化部署流程 配置共享服务器配置jenkins把git…

Python中的优化函数2:cvxpy包

文章目录 介绍使用步骤示例1示例2官方文档 介绍 它是一个基于 Python 的凸优化建模工具,专门用于定义和求解 凸优化问题(Convex Optimization Problems)。CVXPY 提供了一种直观的方式来表达优化问题,并通过高效的求解器来解决这些…

MSciNLI—— 针对科学自然语言推理任务提出的多样化数据集用于训练语言模型和大规模语言模型建立基线

概述 论文地址:https://arxiv.org/pdf/2404.08066 源码地址:https://github.com/msadat3/mscinli 自然语言推理(NLI)是一项识别两个句子之间语义关系的任务。第一个句子称为 “前提”,第二个句子称为 “假设”。传统的…

REVERSE-COMPETITION-CISCN-2025

REVERSE-COMPETITION-CISCN-2025 rand0mezCskydumpcython rand0m 3.12版本的pyd逆向 读16进制,分成4个4字节的int,每个int做两步运算 第一步,右移28bit,左移4bit,然后拼接 注意左移4bit后又&0x3a3affff&#xff0…