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 方法显示消息内容。
相关推荐
GitCode官方16 分钟前
直播预告|鸿蒙原生开发与智能工具实战
华为·harmonyos
Monkey-旭44 分钟前
鸿蒙 5.1 深度解析:ArkUI 4.1 升级与分布式开发新范式
分布式·wpf·harmonyos·arkts·openharmony·arkui
北京流年1 小时前
鸿蒙banner页实现
华为·harmonyos
xq95272 小时前
鸿蒙next 游戏授权登录教程王者归来
harmonyos
HarderCoder3 小时前
重学仓颉-8泛型完全指南:从基础到高级应用
harmonyos
被开发耽误的大厨13 小时前
鸿蒙ArkUI 基础篇-06-组件基础语法-Column/Row/Text
华为·harmonyos
HarderCoder15 小时前
重学仓颉-7类与接口完全指南:从基础到高级特性
harmonyos
HarderCoder18 小时前
重学仓颉-6枚举与模式匹配完全指南
harmonyos
li理19 小时前
鸿蒙应用开发完全指南:深度解析UIAbility、页面与导航的生命周期
前端·harmonyos
HarderCoder20 小时前
重学仓颉-5结构体(Struct)完全指南:从基础到高级用法
harmonyos