HarmonyOS Next 办公应用:消息气泡组件的实现(一)

HarmonyOS Next 办公应用:消息气泡组件的实现

概述

在 HarmonyOS Next 办公类应用开发中,实现消息气泡组件是常见的交互需求。消息气泡可用于展示聊天消息、通知等内容,并且根据消息类型和发送方向有不同的显示样式。下面将介绍如何构建一个支持多种消息类型的消息气泡组件。

核心代码功能及对应代码段

1. 组件状态与属性定义

MessageBubble 组件定义了多个状态和属性,用于控制消息气泡的显示样式和内容。

typescript 复制代码
@Component
export struct MessageBubble {
  receivedName: string ='';
  @Link currentFeatureIndex: number;
  private isReceived: boolean = false;
  private content: string = '';
  private isAppletMsg?: boolean;
  private isDocumentMsg?: boolean;
  avatar1: Resource = $r('app.media.avatar1');
  avatar2: Resource = $r('app.media.avatar7');
  // ...
}
  • receivedName:接收方的名称。
  • isReceived:标记消息是否为接收的消息。
  • content:消息的具体内容。
  • isAppletMsgisDocumentMsg:标记消息是否为小程序消息或文档消息。
  • avatar1avatar2:分别表示接收方和发送方的头像资源。
2. 消息气泡布局构建

build 方法构建了消息气泡的整体布局,根据 isReceived 的值决定消息气泡的对齐方式和头像显示位置。

typescript 复制代码
build() {
  Column() {
    Flex({ justifyContent: this.isReceived ? FlexAlign.Start : FlexAlign.End, direction: FlexDirection.Row }) {
      if (this.isReceived) {
        Image(conversationListData.find((item) => item.name === this.receivedName)?.icon || this.avatar1)
          .width('40vp')
          .height('40vp')
          .flexShrink(0)
      }
      Column() {
        Stack({ alignContent: this.isReceived ? Alignment.TopStart : Alignment.TopEnd }) {
          // 路径绘制,用于消息气泡的三角箭头
          Path()
            .commands('M-10 1 L0 18 L32 1 Z')
            .fillOpacity(1)
            .stroke(Color.White)
            .strokeWidth(1)
            .fill(Color.White)
            .visibility(this.isReceived ? Visibility.Visible : Visibility.None)
          Path()
            .commands('M23 1 L0 28 L-10 1 Z')
            .fillOpacity(1)
            .stroke(Color.White)
            .strokeWidth(1)
            .fill(Color.White)
            .visibility(this.isReceived ? Visibility.None : Visibility.Visible)
            .zIndex(2)
            .margin({ right: '-10vp' })
          Column() {
            this.MessageContent()
          }
          .padding({
            left: '12vp',
            right: '12vp',
            top: '10vp',
            bottom: '10vp'
          })
          .backgroundColor(Color.White)
          .borderRadius(8)
        }
        .padding({
          top: '1vp',
          left: '20vp',
          right: '20vp',
          bottom: '22vp'
        })
        .width('100%')
      }
      .width('100%')

      if (!this.isReceived) {
        Image(this.avatar2)
          .width('40vp')
          .height('40vp')
          .flexShrink(0)
      }
    }
  }
  .margin({ left: '15vp', right: '16vp' })
}
  • 通过 Flex 组件根据 isReceived 控制消息气泡的对齐方式。
  • 使用 Path 组件绘制消息气泡的三角箭头,根据消息方向显示不同的箭头。
  • 调用 MessageContent 方法显示消息内容。
相关推荐
特立独行的猫a5 小时前
HarmonyOS 【诗韵悠然】AI古诗词赏析APP开发实战从零到一系列(一、开篇,项目介绍)
人工智能·华为·harmonyos·古诗词
幽蓝计划9 小时前
鸿蒙跨平台开发教程之Uniapp布局基础
harmonyos
周胡杰10 小时前
鸿蒙接入flutter环境变量配置windows-命令行或者手动配置-到项目的创建-运行demo项目
javascript·windows·flutter·华为·harmonyos·鸿蒙·鸿蒙系统
半青年11 小时前
华为鸿蒙电脑能否作为开发机?开发非鸿蒙应用?
ide·华为·编辑器·电脑·idea·harmonyos·visual studio
bestadc14 小时前
鸿蒙 核心与非核心装饰器
harmonyos
@兔然暴富@15 小时前
#跟着若城学鸿蒙# HarmonyOS NEXT学习之AlphabetIndexer组件详解
harmonyos
沙振宇17 小时前
【HarmonyOS】ArkTS开发应用的横竖屏切换
android·华为·harmonyos
bestadc18 小时前
鸿蒙 从打开一个新窗口到Stage模型的UIAbility组件
harmonyos
雪芽蓝域zzs1 天前
鸿蒙Next开发 获取APP缓存大小和清除缓存
缓存·华为·harmonyos
鸿蒙布道师1 天前
鸿蒙NEXT开发动画案例5
android·ios·华为·harmonyos·鸿蒙系统·arkui·huawei