HarmonyOS实战开发-使用Flex容器组件,实现弹性布局效果。

介绍

本篇Codelab是基于Flex容器组件,实现弹性布局效果。弹性布局的特点是页面元素的宽度按照屏幕分辨率进行适配调整,但整体布局不变。

相关概念

  • Flex组件:以弹性方式布局子组件的容器组件。
  • Search组件:搜索框组件,适用于浏览器的搜索内容输入框等应用场景。
  • Text组件:显示一段文本的组件。
  • Image组件:图片组件,支持本地图片和网络图片的渲染展示。
  • Scroll组件:可滑动的容器组件,当子组件的布局尺寸超过父组件的视口时,内容可以滑动。
  • 条件渲染:条件渲染可根据应用的不同状态,使用if、else和else if渲染对应状态下的UI内容。
  • 循环渲染:基于数组类型数据执行循环渲染。

环境搭建

软件要求

  • DevEco Studio版本:DevEco Studio 3.1 Release。
  • OpenHarmony SDK版本:API version 9。

硬件要求

  • 开发板类型:润和RK3568开发板。
  • OpenHarmony系统:3.2 Release。

环境搭建

完成本篇Codelab我们首先要完成开发环境的搭建,本示例以RK3568开发板为例,参照以下步骤进行:

  1. 获取OpenHarmony系统版本:标准系统解决方案(二进制)。以3.2 Release版本为例:

2.搭建烧录环境。

  1. 完成DevEco Device Tool的安装
  2. 完成RK3568开发板的烧录

3.搭建开发环境。

  1. 开始前请参考工具准备,完成DevEco Studio的安装和开发环境配置。
  2. 开发环境配置完成后,请参考使用工程向导创建工程(模板选择“Empty Ability”)。
  3. 工程创建完成后,选择使用真机进行调测。

代码结构解读

本篇Codelab只对核心代码进行讲解。

├──entry/src/main/ets	           // 代码区
│  ├──common
│  │  └──constants
│  │     └──StyleConstants.ets     // 样式常量类 
│  ├──entryability
│  │  └──EntryAbility.ts           // 程序入口类
│  ├──pages
│  │  └──HomePage.ets              // 主界面	
│  ├──view
│  │  ├──ClearSearch.ets           // 清除历史记录自定义组件
│  │  ├──FlexLayout.ets            // 弹性布局自定义组件
│  │  └──SearchInput.ets           // 搜索输入框自定义组件
│  └──viewmodel
│     └──SearchViewModel.ets       // 历史搜索数据类
└──entry/src/main/resources        // 资源文件目录

编写搜索框布局

在这个章节中,我们需要完成搜索框布局的编写,并实现文本输入和点击事件。效果如图所示:

在ets目录下,点击鼠标右键 > New > Directory,新建名为view的自定义子组件目录。然后在view目录下,点击鼠标右键 > New > ArkTS File,新建名为SearchInput的ArkTS文件。最后在SearchInput.ets文件中,逐步完成如下操作:

  1. 使用@Component新增一个自定义组件,组件名为SearchInput。
  2. 在build()中使用Flex作为容器组件,实现子组件水平排列。
  3. 使用Search组件作为搜索框布局,Text组件作为搜索文本按钮布局。
// SearchInput.ets
@Component
export default struct SearchInput {build() {Flex({ alignItems: ItemAlign.Center }) {// 搜索框布局Search()...// 搜索文本按钮布局Text($r('app.string.search'))...}...}
}

接下来我们实现Search组件的样式及输入功能,并将输入的数据添加到数组searchArr中:

  1. 使用@State定义变量searchInput,存储搜索框输入的文本内容。
  2. 在Search组件参数中,将变量searchInput赋值给参数value,参数placeholder填写提示内容,参数icon表示搜索图标路径。
  3. 设置高度height、宽度width、背景颜色backgroundColor、提示内容颜色placeholderColor等属性。
  4. 设置onChange事件,将用户输入的内容绑定到变量searchInput中。
  5. 使用@Link定义一个数组变量searchArr,点击搜索文本按钮时,将用户输入的内容即searchInput的值,通过数组的unshift()方法,在数组searchArr的头部添加数据。
// SearchInput.ets
@Component
export default struct SearchInput {@State searchInput: string = '';@Link searchArr: Array<string>;build() {Flex({ alignItems: ItemAlign.Center }) {// 搜索框布局Search({value: this.searchInput,placeholder: StyleConstants.SEARCH_PLACEHOLDER,icon: StyleConstants.SEARCH_ICON}).placeholderColor($r('app.color.placeholder_color')).placeholderFont({ size: $r('app.float.font_size') }).textFont({ size: $r('app.float.font_size') }).height(StyleConstants.SEARCH_HEIGHT).width(StyleConstants.SEARCH_WIDTH).backgroundColor(Color.White)....onChange((value: string) => {this.searchInput = value;})// 搜索文本按钮布局Text($r('app.string.search'))....onClick(() => {if (this.searchInput !== '' && this.searchInput.trim().length > 0) {// 使用unshift在数组头部添加数据this.searchArr.unshift(this.searchInput.trim());}this.searchInput = '';})}...}
}

然后我们在HomePage.ets首页中,引入SearchInput搜索输入框自定义组件。

  1. 使用@State定义数组变量searchArr,存放最近搜索文本内容。
  2. 在构造参数中,使用$符号引用@State修饰的变量searchArr,将父组件的变量searchArr与子组件searchArr变量关联起来。
// HomePage.ets
import SearchInput from '../view/SearchInput';@Entry
@Component
struct HomePage {@State searchArr: Array<string> = SearchViewModel.getSearchArrData();build() {Column() {// 搜索输入框自定义组件SearchInput({ searchArr: $searchArr })}...}
}

编写清除记录布局

在这个章节中,我们需要完成清除记录布局的编写,并实现条件渲染。效果如图所示:

在view目录下,点击鼠标右键 > New > ArkTS File,新建名为ClearSearch的ArkTS文件。然后在ClearSearch.ets文件中,逐步完成如下操作:

  1. 使用@Component新增一个自定义组件,组件名为ClearSearch。
  2. 在build()中使用Flex作为容器组件,实现子组件水平排列。
  3. 使用if/else实现条件渲染:当有搜索内容时,显示最近搜索的文本和清除搜索内容图标;否则就显示没有搜索内容和相关图片。
  4. 使用@Link定义数组变量searchArr,当点击清除搜索内容图标时,所有最近搜索内容清空。
// ClearSearch.ets
@Component
export default struct ClearSearch {// 搜索内容数组@Link searchArr: Array<string>;build() {Flex({ alignItems: ItemAlign.Center }) {if (this.searchArr.length > 0) {Text($r('app.string.recent_searches'))...Image($r('app.media.ic_delete'))....onClick(() => {this.searchArr.splice(0, this.searchArr.length);this.searchArr.length = 0;})} else {Column() {Image($r('app.media.ic_no_search'))...Text($r('app.string.no_search_content'))...}...}}}
}

然后我们在HomePage.ets首页中,引入ClearSearch搜索输入框自定义组件。

// HomePage.ets
import SearchInput from '../view/SearchInput';
import ClearSearch from '../view/ClearSearch';@Entry
@Component
struct HomePage {@State searchArr: Array<string> = SearchViewModel.getSearchArrData();build() {Column() {// 搜索输入框自定义组件SearchInput({ searchArr: $searchArr })// 清除搜索记录自定义组件ClearSearch({ searchArr: $searchArr })}...}
}

编写弹性布局

在这个章节中,我们需要完成弹性布局的功能样式,并实现循环渲染。效果如图所示:

在view目录下,点击鼠标右键 > New > ArkTS File,新建名为FlexLayout的ArkTS文件。然后在FlexLayout.ets文件中,逐步完成如下操作:

  1. 使用@Component新增一个自定义组件,组件名为FlexLayout。
  2. 在build()中使用Flex作为容器,设置参数wrap为FlexWrap.Wrap时为弹性布局,实现自动换行。
  3. 使用if实现条件渲染,当有搜索内容时,显示最近搜索的所有内容。
  4. 使用@Link定义数组变量searchArr,表示子组件要显示的所有最近搜索文本内容。
  5. 使用ForEach遍历变量searchArr,实现循环渲染。
// FlexLayout.ets
@Component
export default struct FlexLayout {@Link searchArr: Array<string>;build() {Scroll() {// Flex布局, wrap设置成FlexWrap.Wrap时为弹性布局Flex({ justifyContent: FlexAlign.Start, wrap: FlexWrap.Wrap }) {if (this.searchArr.length > 0) {// 循环渲染		ForEach(this.searchArr, (item: string) => {Text(`${item}`)...}, (item: string) => JSON.stringify(item))}}...}}
}

然后我们在HomePage.ets首页中,引入FlexLayout搜索输入框自定义组件。

// HomePage.ets
import SearchInput from '../view/SearchInput';
import ClearSearch from '../view/ClearSearch';
import FlexLayout from '../view/FlexLayout';@Entry
@Component
struct HomePage {@State searchArr: Array<string> = SearchViewModel.getSearchArrData();build() {Column() {// 搜索输入框自定义组件SearchInput({ searchArr: $searchArr })// 清除搜索记录自定义组件ClearSearch({ searchArr: $searchArr })// 弹性布局自定义组件FlexLayout({ searchArr: $searchArr })}...}
}

总结

您已经完成了本次Codelab的学习,并了解到以下知识点:

  1. 使用Flex容器组件,实现弹性布局效果。
  2. 使用if/else实现条件渲染。
  3. 使用ForEach实现循环渲染。

为了帮助大家更深入有效的学习到鸿蒙开发知识点,小编特意给大家准备了一份全套最新版的HarmonyOS NEXT学习资源,获取完整版方式请点击→《HarmonyOS教学视频》

HarmonyOS教学视频:语法ArkTS、TypeScript、ArkUI等.....视频教程

鸿蒙生态应用开发白皮书V2.0PDF:

获取完整版白皮书请点击→《鸿蒙生态应用开发白皮书V2.0PDF》

鸿蒙 (Harmony OS)开发学习手册

一、入门必看

  1. 应用开发导读(ArkTS)
  2. ……

二、HarmonyOS 概念

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全
  5. ........

三、如何快速入门?《做鸿蒙应用开发到底学习些啥?》

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

四、开发基础知识

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

五、基于ArkTS 开发

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

更多了解更多鸿蒙开发的相关知识可以参考:《鸿蒙 (Harmony OS)开发学习手册》

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

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

相关文章

电商搬家上货软件分享,官方授权API接口,一键铺货更安全!

最近不少地方气温回暖&#xff0c;不少卖家开始布局春夏款产品&#xff0c;首先需要解决的就是货源和上货问题。 当我们看到市面上某款产品很有市场&#xff0c;想要复制到自己店铺来卖&#xff0c;如何操作呢&#xff1f; 按照之前的玩法&#xff0c;是直接借助工具从别人店…

五年前端的面试之旅

哈喽我是树酱&#xff0c;最近整理了下前端面试相关的知识题库&#xff0c;借此分享给各位小伙伴&#xff0c;帮助小伙伴早日拿到钟意的offer&#xff01; 前言 最近就业市场不景气&#xff0c;跟大环境较差也有关&#xff0c;确实给我们也会带来一定的挑战。在招聘网站投简历的…

竞赛 python+大数据校园卡数据分析

0 前言 &#x1f525; 优质竞赛项目系列&#xff0c;今天要分享的是 &#x1f6a9; 基于yolov5的深度学习车牌识别系统实现 &#x1f947;学长这里给一个题目综合评分(每项满分5分) 难度系数&#xff1a;4分工作量&#xff1a;4分创新点&#xff1a;3分 该项目较为新颖&am…

【面试题】http与https相关面试题(持续收录)

1.http与https的区别&#xff1f; HTTP&#xff08;Hypertext Transfer Protocol&#xff09;和HTTPS&#xff08;Hypertext Transfer Protocol Secure&#xff09;是用于在客户端和服务器之间传输数据的通信协议。它们之间的主要区别在于安全性和数据传输的加密方式&#xff1…

WebSocket 详解-小案例展示

简介&#xff1a;Websocket是一种用于H5浏览器的实时通讯协议&#xff0c;可以做到数据的实时推送&#xff0c;可适用于广泛的工作环境&#xff0c;例如客服系统、物联网数据传输系统&#xff0c;该测试工具可用于websocket开发初期的测试工作。 文章末尾有此案例的完整源代码。…

【JVM】JVM类加载过程

文章目录 &#x1f334;类加载过程&#x1f338;加载&#x1f338;加载&#x1f338;验证&#x1f338;准备&#x1f338;解析&#x1f338;初始化 &#x1f332;双亲委派模型&#x1f338;什么是双亲委派模型&#xff1f;&#x1f338;双亲委派模型的优点 ⭕总结 &#x1f334…

visual studio报:引发的异常:“System.DllNotFoundException”(位于 ConsoleCAN1.exe 中)

最近在重构CAN通信的代码&#xff0c;把论文中的java转为C#实现&#xff0c;由于某种原因&#xff0c;java不能复现&#xff0c;所以转为c#。 然而c#的重构过程遇到许多问题&#xff0c;因为两种语言的编程方式、线程等等实现上有所差异。 其中一个错误&#xff1a; 引发的异…

深入理解数据结构第一弹——二叉树(1)——堆

前言&#xff1a; 在前面我们已经学习了数据结构的基础操作&#xff1a;顺序表和链表及其相关内容&#xff0c;今天我们来学一点有些难度的知识——数据结构中的二叉树&#xff0c;今天我们先来学习二叉树中堆的知识&#xff0c;这部分内容还是非常有意思的&#xff0c;下面我们…

网络安全接入认证-802.1X接入说明

介绍 802.1X是一个网络访问控制协议&#xff0c;它可以通过认证和授权来控制网络访问。它的基本原理是在网络交换机和认证服务器之间建立一个安全的通道&#xff0c;并要求客户端提供身份验证凭据。如果客户端提供的凭据是有效的&#xff0c;交换机将开启端口并允许访问。否则&…

Linux(CentOS7.5) 安装部署 Python3.6(超详细!包含 Yum 源配置!)

文章目录 1.配置 Yum 源2.下载 Python3 包3. 解压4.安装依赖环境5.安装出错场景 6.创建软链接7.配置 Python3 的环境变量8.验证补充&#xff1a;安装 openssl-devel补充&#xff1a;pip3 源配置 1.配置 Yum 源 # 注意&#xff01;&#xff01;&#xff01;请先切换到 root 账号…

Go语言爬虫实战(线程池)

Go语言爬虫实战 目标 利用go语言爬取指定网站的图片。实现爬取网站任意页面所有所需的图片。实现使用go语言线程池开启多个线程爬取图片内容。最后实现创建多个文件夹存储图片。 爬取网站图片 步骤 对指定URL发去GET请求&#xff0c;获取对应的响应。 resp, err : http.Get(…

小迪学习笔记(内网安全)(常见概念和信息收集)

小迪学习笔记&#xff08;内网安全&#xff09;&#xff08;一&#xff09; 内网分布图内网基本概念工作组和域环境的优缺点内网常用命令域的分类单域父域和子域域数和域森林 Linux域渗透问题内网安全流程小迪演示环境信息收集mimikatzLazagne(all)凭据信息政集操作演示探针主机…