首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >ArKTS: staic message simple UI

ArKTS: staic message simple UI

作者头像
geovindu
发布2026-06-18 19:11:17
发布2026-06-18 19:11:17
1660
举报

项目结构:

一种:

代码语言:javascript
复制
/**
 # encoding: utf-8
 # 版权所有 2024 ©涂聚文有限公司
 # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
 # 描述: https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ohos-arkui-advanced-dialog
 # Author    : geovindu,Geovin Du 涂聚文. https://yesicon.app/
 # IDE       : DevEco Studio 5.1.1 HarmonyOS ArKTS
 # OS        : windows 10  ohpm install @coremail/mail_base     https://gitee.com/openharmony-tpc/ohos_mail_base
 # database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
 # Datetime  : 2024/10/31 20:33
 # User      : geovindu
 # Product   : MyApplicatin
 # Project   : MyApplicatin
 # File      : WxList.ets
 * */
import { UserInfoBase } from '../../constant/UserInfoBase'
import { router } from '@kit.ArkUI';
import { TodoTitleNameUtils } from '../../pages/utils/TodoTitleNameUtils'
import { trustedAppService } from '@kit.DeviceSecurityKit';
import { CommonConstantWX } from '../../constant/CommonConstantWX'
import { UserMessageBase } from '../../constant/UserMessageBase';
 
// 2. 定义传递的参数类型(包含user属性)
interface UserParams {
  user: UserInfoBase;
}
 
@Entry
@Component
struct WxList {
  @State message: string = '聊天';
  @State users: UserInfoBase=new UserInfoBase() ;
  @State messagelist: Array<UserMessageBase> = CommonConstantWX.mUserMessage
  // 3. 获取参数并断言为UserParams类型
  //const params = router.getParams() as UserParams | undefined;
 
  aboutToAppear() {
    // 获取传递的参数
    const params =router.getParams() as UserParams | undefined;// router.getParams();
    if (params?.user) {
      this.users = params.user as UserInfoBase; // 类型转换,确保与传递的item结构一致
 
    }
  }
  build() {
    Column() {
 
      Row() {
        TodoTitleNameUtils({ isTitle: true, titleName: this.users.name === undefined ? "" : this.users.name })
      }
      .width('100%')
      .height('15pv')
 
      List() {
        ForEach(this.messagelist, (item: UserMessageBase) => {
          ListItem() {
            Column() {
              // 外层Row设置主轴靠右对齐,确保内部元素整体靠右
              Row() {
                if(item.category===0) {
                  Image(item.img)
                    .width(40)
                    .height(50)
                    .margin({right: 8})
                    .borderRadius(5)
                    .objectFit(ImageFit.Contain)
                  // 移除不必要的align,由外层Row统一控制对齐
                }
                Text(item.content)
                  .fontSize($r('app.float.pagemessagesize'))
                  .fontWeight(FontWeight.Bold)
                  .backgroundColor(item.category===0?'#ffffff': '#ff81cd0a') // 白色背景
                  .borderRadius(10) // 圆角效果,数值可调整
                  .padding({ left: 12, right: 12, top: 8, bottom: 8 }) // 文本与背景的内边距
                  .margin({ right: 8 }) // 图片与文本之间的间距
                  .onClick(() => {
                    router.pushUrl({
                      url: 'pages/weixin/WXHome',
                    })
                  })
                if(item.category===1) {
                  Image(item.img)
                    .width(40)
                    .height(50)
                  .margin({left: 8})
                    .borderRadius(5)
                    .objectFit(ImageFit.Contain)
                  // 移除不必要的align,由外层Row统一控制对齐
                }
              }
              .width('100%')
              .justifyContent(item.category===0?FlexAlign.Start:FlexAlign.End) // 关键:Row内元素靠右排列 FlexAlign.End
              .align(item.category===0?Alignment.Start:Alignment.End) // Alignment.End
              .margin({ right: 1})
            }
            .alignItems(item.category===0?HorizontalAlign.Start:HorizontalAlign.End) // 确保Column的子元素(Row)靠右对齐 HorizontalAlign.End
            .align(item.category===0?Alignment.Start:Alignment.End) //Alignment.End
            // 可根据需要添加整体外边距
            .margin({ right: 12, top: 8, bottom: 8 })
 
 
 
          }.align(item.category===0?Alignment.Start:Alignment.End) // Alignment.End
        })
      }.height('80%')
      .width('100%')
      .backgroundColor('#ccc')
      .scrollSnapAlign(ScrollSnapAlign.START)
 
      Row({ space: 8 }) {
        // 语音按钮
        Image($r('app.media.SoundHighSolid'))
          .width(30)
          .height(30)
          .objectFit(ImageFit.Contain)
          .onClick(() => {
            router.pushUrl({
              url: 'pages/weixin/WXHome',
            })
          })
 
        // 输入框
        TextInput({ placeholder: '请输入消息...'})
          .id('WxListHelloWorld')
          .fontSize($r('app.float.page_text_font_size'))
          .fontWeight(FontWeight.Normal)
          .backgroundColor('#ffffff')
          .borderRadius(20)  // 圆角输入框
          .padding({ left: 16, right: 16 })  // 文本内边距
          .onClick(() => {
            this.message = this.users?.name || "";
          })
          .flexGrow(1)  // 自动填充剩余空间
          .width('75%')
        // 发送按钮
        Button('+')
          .fontSize(18)
          .width(40)
          .height(40)
          .borderRadius(20)  // 圆形按钮
          .backgroundColor('#07C160')  // 微信绿
          //.textStyle({ color: '#ffffff' })
          .onClick(() => {
            router.back()
          })
      }
      .margin({ top: 8, left: 12, right: 12, bottom: 8 })  // 整体外边距
      .height(50)  // 合适的高度
      .backgroundColor('#f5f5f5')  // 浅灰背景
      .alignItems(VerticalAlign.Center)  // 垂直居中对齐
      .width('100%')
    }
  }
}

二种:

代码语言:javascript
复制
/**
 # encoding: utf-8
 # 版权所有  2025 ©涂聚文有限公司™ ®
 # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
 # 描述:
 # Author    : geovindu,Geovin Du 涂聚文.
 # IDE       : DevEco Studio 5.1.1  HarmonyOS ArKTS
 # os        : windows 10
 # database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
 # Datetime  : 2025/8/2 23:56
 # User      :  geovindu
 # Product   : DevEco Studio
 # Project   : SQLiteApp
 # File      : WxControl.ets
 **/
import { UserMessageBase } from '../constant/UserMessageBase';
import { router } from '@kit.ArkUI';

@Component//表示组件
export default struct WxControl {

  @Prop useritem:UserMessageBase=new UserMessageBase

  build() {

    // 外层Row设置主轴靠右对齐,确保内部元素整体靠右
    Row() {
      if(this.useritem.category===0) {
        Image(this.useritem.img)
          .width(40)
          .height(50)
          .margin({right: 8})
          .borderRadius(5)
          .objectFit(ImageFit.Contain)
        // 移除不必要的align,由外层Row统一控制对齐
      }
      Text(this.useritem.content)
        .fontSize($r('app.float.pagemessagesize'))
        .fontWeight(FontWeight.Bold)
        .backgroundColor(this.useritem.category===0?'#ffffff': '#ff81cd0a') // 白色背景
        .borderRadius(10) // 圆角效果,数值可调整
        .padding({ left: 12, right: 12, top: 8, bottom: 8 }) // 文本与背景的内边距
        .margin({ right: 8 }) // 图片与文本之间的间距
        .onClick(() => {
          router.pushUrl({
            url: 'pages/weixin/WXHome',
          })
        })
      if(this.useritem.category===1) {
        Image(this.useritem.img)
          .width(40)
          .height(50)
          .margin({left: 8})
          .borderRadius(5)
          .objectFit(ImageFit.Contain)
        // 移除不必要的align,由外层Row统一控制对齐
      }
    }
    .width('100%')
    .justifyContent(this.useritem.category===0?FlexAlign.Start:FlexAlign.End) // 关键:Row内元素靠右排列 FlexAlign.End
    .align(this.useritem.category===0?Alignment.Start:Alignment.End) // Alignment.End
    .margin({ right: 1})

  }

}


/**
 # encoding: utf-8
 # 版权所有 2024 ©涂聚文有限公司
 # 许可信息查看:言語成了邀功盡責的功臣,還需要行爲每日來值班嗎
 # 描述: https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ohos-arkui-advanced-dialog
 # Author    : geovindu,Geovin Du 涂聚文. https://yesicon.app/
 # IDE       : DevEco Studio 5.1.1 HarmonyOS ArKTS
 # OS        : windows 10  ohpm install @coremail/mail_base     https://gitee.com/openharmony-tpc/ohos_mail_base
 # database  : mysql 9.0 sql server 2019, postgreSQL 17.0  Oracle 21c Neo4j
 # Datetime  : 2024/10/31 20:33
 # User      : geovindu
 # Product   : MyApplicatin
 # Project   : MyApplicatin
 # File      : WxList.ets
 * */
import { UserInfoBase } from '../../constant/UserInfoBase'
import { router } from '@kit.ArkUI';
import { TodoTitleNameUtils } from '../../pages/utils/TodoTitleNameUtils'
import { trustedAppService } from '@kit.DeviceSecurityKit';
import { CommonConstantWX } from '../../constant/CommonConstantWX'
import { UserMessageBase } from '../../constant/UserMessageBase';
import WxControl, {  } from '../../Control/WxControl'
import { it } from '@ohos/hypium';

// 2. 定义传递的参数类型(包含user属性)
interface UserParams {
  user: UserInfoBase;
}

@Entry
@Component
struct WxList {
  @State message: string = '聊天';
  @State users: UserInfoBase=new UserInfoBase() ;
  @State messagelist: Array<UserMessageBase> = CommonConstantWX.mUserMessage
  // 3. 获取参数并断言为UserParams类型
  //const params = router.getParams() as UserParams | undefined;

  aboutToAppear() {
    // 获取传递的参数
    const params =router.getParams() as UserParams | undefined;// router.getParams();
    if (params?.user) {
      this.users = params.user as UserInfoBase; // 类型转换,确保与传递的item结构一致

    }
  }
  build() {
    Column() {

      Row() {
        TodoTitleNameUtils({ isTitle: true, titleName: this.users.name === undefined ? "" : this.users.name })
      }
      .width('100%')
      .height('15pv')

      List() {
        ForEach(this.messagelist, (item: UserMessageBase) => {
          ListItem() {
            Column() {
              // 外层Row设置主轴靠右对齐,确保内部元素整体靠右
              WxControl({ useritem: item }) //引用用户控件
            }
            .alignItems(item.category===0?HorizontalAlign.Start:HorizontalAlign.End) // 确保Column的子元素(Row)靠右对齐 HorizontalAlign.End
            .align(item.category===0?Alignment.Start:Alignment.End) //Alignment.End
            // 可根据需要添加整体外边距
            .margin({ right: 12, top: 8, bottom: 8 })



          }.align(item.category===0?Alignment.Start:Alignment.End) // Alignment.End
        })
      }.height('80%')
      .width('100%')
      .backgroundColor('#ccc')
      .scrollSnapAlign(ScrollSnapAlign.START)

      Row({ space: 8 }) {
        // 语音按钮
        Image($r('app.media.SoundHighSolid'))
          .width(30)
          .height(30)
          .objectFit(ImageFit.Contain)
          .onClick(() => {
            router.pushUrl({
              url: 'pages/weixin/WXHome',
            })
          })

        // 输入框
        TextInput({ placeholder: '请输入消息...'})
          .id('WxListHelloWorld')
          .fontSize($r('app.float.page_text_font_size'))
          .fontWeight(FontWeight.Normal)
          .backgroundColor('#ffffff')
          .borderRadius(20)  // 圆角输入框
          .padding({ left: 16, right: 16 })  // 文本内边距
          .onClick(() => {
            this.message = this.users?.name || "";
          })
          .flexGrow(1)  // 自动填充剩余空间
          .width('75%')
        // 发送按钮
        Button('+')
          .fontSize(18)
          .width(40)
          .height(40)
          .borderRadius(20)  // 圆形按钮
          .backgroundColor('#07C160')  // 微信绿
          //.textStyle({ color: '#ffffff' })
          .onClick(() => {
            router.back()
          })
      }
      .margin({ top: 8, left: 12, right: 12, bottom: 8 })  // 整体外边距
      .height(50)  // 合适的高度
      .backgroundColor('#f5f5f5')  // 浅灰背景
      .alignItems(VerticalAlign.Center)  // 垂直居中对齐
      .width('100%')
    }
  }
}
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2026-06-17,如有侵权请联系 cloudcommunity@tencent.com 删除
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档