HarmonyOS应用开发-仿微信UI实现

在本篇博客中,介绍一个仿微信的 HarmonyOS 应用,应用包括微信的首页、通讯录、发现、我的页面,以及聊天界面。

一、先上效果图:

二、代码解读

以聊天界面为例,代码如下(解读在代码下面):

import {Title} from '../model/CommonStyle'
import router from '@ohos.router'@Entry
@Component// 定义聊天详情页面的结构
export struct ChatDetailPage {// 用户头像private userAvatar: string = router.getParams()['userAvatar'] as string// 用户名private userName: string = router.getParams()['userName'] as string// 聊天详情private chatDetail: string = router.getParams()['chatDetail'] as string// 构建方法build() {Column() {// 标题Title({ text: this.userName })// 左侧消息气泡LeftMsgBubble({ imageSrc: this.userAvatar, text: "今天天气真好,想不想一起去户外活动?" })// 右侧消息气泡RightMsgBubble({ imageSrc: "user20.webp", text: "当然想啊,你打算去哪里?" })// 左侧消息气泡LeftMsgBubble({ imageSrc: this.userAvatar, text: "我想去公园,逛逛花花草草,你觉得怎么样?" })// 右侧消息气泡RightMsgBubble({ imageSrc: "user20.webp", text: "好主意!我也喜欢大自然的感觉。" })// 右侧消息气泡RightMsgBubble({ imageSrc: "user20.webp", text: "我们可以带上飞盘或者羽毛球,一起玩玩怎么样?" })// 左侧消息气泡LeftMsgBubble({ imageSrc: this.userAvatar, text: "太棒了,我会准备一些小吃,我们一起享受阳光吧!" })}.height("100%")}
}// 左侧消息气泡组件
@Component
struct LeftMsgBubble {private imageSrc: stringprivate text: string// 构建方法build() {Row() {// 用户头像Image($rawfile(this.imageSrc)).width('120px').height('120px').margin({ left: '10px', right: '10px' })// 文本消息Text(this.text).fontSize('14fp').backgroundColor("#cccccc").padding(10).borderRadius(10).margin({ right: '280px' })}.width('100%').margin({ top: '20px', bottom: '20px' }).alignItems(VerticalAlign.Top)}
}// 右侧消息气泡组件
@Component
struct RightMsgBubble {private imageSrc: stringprivate text: string// 构建方法build() {Flex({ direction: FlexDirection.RowReverse }) {// 用户头像Image($rawfile(this.imageSrc)).width('120px').height('120px').margin({ left: '10px', right: '10px' }).objectFit(ImageFit.Contain)Flex({ direction: FlexDirection.RowReverse, justifyContent: FlexAlign.Start }) {// 文本消息Text(this.text).fontSize('14fp').backgroundColor("#1dde40").padding(10).borderRadius(10).margin({ left: '140px' })}}.margin({ top: '20px', bottom: '20px' })}
}

      

这段代是使用ArkTS语言 来构建聊天详情页面的 UI 组件。以下是对代码的简要解释:

  1. ChatDetailPage 结构体:
    • userAvatar、userName、chatDetail 是私有成员变量,通过路由获取用户头像、用户名和聊天详情。
    • build 方法定义了页面的结构,包括标题和一系列的消息气泡。
  2. LeftMsgBubble 和 RightMsgBubble 组件:
    • 这两个组件分别表示左侧和右侧的消息气泡。
    • imageSrc 存储用户头像的路径,text 存储消息文本。
    • build 方法定义了每个消息气泡的结构,包括图片和文本。左侧消息气泡的背景色为灰色,右侧消息气泡的背景色为绿色。
  3. Flex 和 Column:
    • Flex 和 Column 是布局相关的组件,用于定义灵活的盒状模型,方便构建响应式的用户界面。
  4. Image 和 Text 组件:
    • Image 和 Text 组件用于显示图片和文本内容。
    • 通过 $rawfile 函数获取图片资源。
  5. 样式设置:
    • 通过方法链式调用设置了消息气泡的样式,包括大小、边距、背景色、文本大小等。
  6. Flex 相关属性:
    • 使用了 FlexDirection、FlexAlign 等属性,通过这些属性设置了消息气泡的布局方式。
  7. 组件嵌套:
    • 左右两侧的消息气泡组件被嵌套在 Column 和 Flex 中,形成了聊天页面的布局。

三、项目地址

完整项目代码:

OurChat: HarmonyOS ArkUI的仿微信界面

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

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

相关文章

【华为数据之道学习笔记】7-3基于物理世界的“硬感知”能力

“硬感知”能力的分类 数据采集方式主要经历了人工采集和自动采集两个阶段。自动采集技术仍在发展中,不同的应用领域所使用的具体技术手段也不同。基于物理世界的“硬感知”依靠的就是数据采集,是将物理对象镜像到数字世界中的主要通道,是构建…

STM32F407-14.3.10-表73具有有断路功能的互补通道OCx和OCxN的输出控制位-1x000-1x111(总结)

基于表73中,主输出使能(MOE1)的8种OCx与OCxN的输出状态及波形图,已经单独整理输出8篇文章,方便需要时单独回查。 主输出使能时(MOE1)总结如下 通过表73中可得以下结论 1、控制位1x000与1x100…

ffmpeg两种windows版本区别说明

版本一 必须拷贝exe和dll文件才能使用,如果缺少dll则exe不正正常执行 如果缺少dll ,执行 exe会报错如下 版本2 直接拷贝exe就能使用,没有依赖的环境

test perf-03-性能测试之 Gatling 使用入门官方教程

quick start 快速入门 学习 Gatling 的概念,使用录制器创建可运行的 Gatling 仿真。 介绍 在这一部分,我们将使用 Gatling 进行负载测试一个简单的云托管的 Web 服务器,并向您介绍 DSL(领域特定语言)的基本要素。 …

机器学习 -- 数据预处理

系列文章目录 未完待续…… 目录 系列文章目录 前言 一、数值分析简介 二、内容 前言 tips:这里只是总结,不是教程哈。 以下内容仅为暂定,因为我还没找到一个好的,让小白(我自己)也能容易理解&#x…

git 如何将某个分支的某个提交复制到另外一个分支

请直接去看原文: 原文链接:git 如何将某个分支的某个提交复制到另外一个分支_gitlab里面的markdown文件可以复用其他分支的吗-CSDN博客 --------------------------------------------------------------------------------------------------------------------------------…

防火墙什么用,软件防火墙与硬件防火墙有什么不一样

防火墙是一种网络安全技术,通过有机结合各类用于安全管理与筛选的软件和硬件设备,在计算机网络的内、外网之间构建一道相对隔绝的保护屏障,以保护用户资料与信息的安全性。 防火墙的作用的详细说明: 1.访问控制:防火…

SpingBoot的项目实战--模拟电商【2.登录】

🥳🥳Welcome Huihuis Code World ! !🥳🥳 接下来看看由辉辉所写的关于SpringBoot电商项目的相关操作吧 目录 🥳🥳Welcome Huihuis Code World ! !🥳🥳 一.功能需求 二.代码编写 …

如何使用mac电脑,1、使用快捷命令打开访达,2、使用终端命令创建文件,3、使用命令打开创建的文件,并且在vscode中打开

如何使用mac电脑 1、使用快捷命令打开访达 optioncommand空格键 快速进入访达 shiftcmmandn 创建一个空目录 2、使用终端命令创建文件 2.1进入文件夹 在终端页面输入“cd /Users/yunf/Desktop/”并按回车键(此时进入到桌面文件夹,如果需要进入到其它…

算法分析-回溯算法-求解N皇后问题

一.题目需求 n皇后问题是一道比较经典的算法题。它研究的是将n个皇后放置在一个nn的棋盘上,使皇后彼此之间不相互攻击。 即任意两个皇后都不能处于同一行、同一列或同一斜线上。 二.算法思想 1.构建棋盘 可以用一个nn列表来表示棋盘,设皇后所在的位…

Vue 问题解决

一、问题:TypeError: (0 , _message.default) is not a function 当没有default时,在其他页面import引入的时,必须加{}。 二、问题:Vue前端页面的表格数据总是一行一行的显示 使用Async/Await来解决前端数据一行一行显示的问题。可以将获取部…

vue+element+springboot实现多张图片上传

1.需求说明 2.实现思路 3.el-upload组件主要属性说明 4.前端传递MultipartFile数组与服务端接收说明 5.完整代码 1.需求说明 动态模块新增添加动态功能,支持多张图片上传.实现过程中对el-upload组件不是很熟悉,踩了很多坑,当然也参考过别的文章,发现处理很…

Spark RDD操作性能优化技巧

Apache Spark是一个强大的分布式计算框架,用于处理大规模数据。然而,在处理大数据集时,性能优化成为一个关键问题。本文将介绍一些Spark RDD操作的性能优化技巧,帮助大家充分利用Spark的潜力,并获得更快的处理速度。 …

2023.12.27 关于 Redis 数据类型 List 常用命令

目录 List 类型基本概念 List 类型特点 List 操作命令 LPUSH LPUSHX RPUSH RPUSHX LRANGE LPOP RPOP LINDEX LINSERT LREM LTRIM LSET 阻塞版本的命令 阻塞版本 和 非阻塞版本的区别 BLPOP & BRPOP List 类型基本概念 Redis 中的列表(list&am…

第十一章 Stream消息驱动

Stream消息驱动 gitee:springcloud_study: springcloud:服务集群、注册中心、配置中心(热更新)、服务网关(校验、路由、负载均衡)、分布式缓存、分布式搜索、消息队列(异步通信)、数据库集群、…

Apache Commons JCS缓存解决方案

第1章:引言 大家好,我是小黑!今天,咱们来聊聊Apache Commons JCS,一个Java界里的缓存大杀器。缓存技术,对于提高应用性能来说,就像是给它加了一剂兴奋剂,能让数据访问变得快如闪电。…

Qt(二):使用udp发送与接收图片

使用Qt来通过UDP协议发送和接收图片可以分为几个步骤。以下是一个基本的指南: 发送图片准备图片数据:首先,你需要将图片转换为可以在网络上传输的数据格式。通常,这涉及到将图片转换为字节数组。设置UDP套接字:在Qt中…

OpenCV-Python(21):OPenCV查找及绘制轮廓

1.认识轮廓 1.1 目标 理解什么是轮廓学习掌握找轮廓、绘制轮廓等学习使用cv2.findContours()、cv2.drawContours()函数的用法 1.2 什么是轮廓 在OpenCV中,轮廓是图像中连续的边界线的曲线,具有相同的颜色或者灰度,用于表示物体的形状。轮廓…

linux用户态与内核态通过字符设备交互

linux用户态与内核态通过字符设备交互 简述 Linux设备分为三类,字符设备、块设备、网络接口设备。字符设备只能一个字节一个字节读取,常见外设基本都是字符设备。块设备一般用于存储设备,一块一块的读取。网络设备,Linux将对网络…

web自动化(4)——POM设计重构

1. 什么是POM Page Object Model 是ui自动化测试中常见的封装方式。 原理:将页面封装为PO对象,然后通过面向对象的方式实现UI自动化 2. 封装原则 PO无需包含全部UI元素PO应当验证元素PO不应该包含断言PO不应该暴露元素 3. 怎么进行POM封装 面向对象…