ArKTS: staic message simple UI
项目结构:
一种:
/** # 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%') } } }
二种:
/** # 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%') } } }
import { UserInfoBase } from '../../constant/UserInfoBase' import { CommonConstantWX } from '../../constant/CommonConstantWX' import { router } from '@kit.ArkUI'; import promptAction from '@ohos.promptAction' import { BusinessError } from '@ohos.base'; @Entry @Component struct WXHome { @State homeList: Array<UserInfoBase> = CommonConstantWX.contactsList build() { Column(){ Search({placeholder: '搜索'}) .width('90%') .backgroundColor(Color.White) .borderRadius(10) /*//搜索框按钮 .searchButton('搜索') //提示词的设置文本颜色,大小, .placeholderColor(Color.Red) .placeholderFont({size: 20,weight: 700}) //提交逻辑,点击放大镜和搜索按钮都会触发 .onSubmit(() => { console.log('点击了提交'); }) //文本改变的逻辑,在输入框输入或者删除都会触发 .onChange((value: string) => { console.log('文本改变' + value); })*/ List(){ ForEach(this.homeList,(item: UserInfoBase) => { ListItem(){ Column({space: 8}) { Row({ space: 20 }) { Image(item.img) .width(40) .height(50) .objectFit(ImageFit.Contain) .borderRadius(5) .onClick(() => { router.pushUrl({ url: 'pages/Index', }) }) Text(item.name) .onClick(() => { // 页面跳转并传递参数 router.pushUrl({ url: 'pages/weixin/WxList', // 目标页面路径 params: { user: item // 需要传递的参数 } }, router.RouterMode.Single) // 可选参数,指定路由模式 .then(() => { console.log('页面跳转成功'); }).catch(() => { console.log('页面跳转失败:'); promptAction.showToast({ message: '页面跳转失败', duration: 2000 }) }) }) } .justifyContent(FlexAlign.Start) Row(){ Divider() .height(0.5) .backgroundColor(Color.Gray) } }.alignItems(HorizontalAlign.Start) } }) } } .width('100%') .height('100%') .backgroundColor('#ffd7d6d6') } }
/** # 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 : WXHome.ets **/ import { UserInfoBase } from '../../constant/UserInfoBase' import { CommonConstantWX } from '../../constant/CommonConstantWX' import { router } from '@kit.ArkUI'; import promptAction from '@ohos.promptAction' import { BusinessError } from '@ohos.base'; @Entry @Component struct WXHome { @State homeList: Array<UserInfoBase> = [] @State searchText: string = '' aboutToAppear() { this.initData(); } private initData() { try { // 强制使用默认测试数据,排除数据源问题 this.homeList = CommonConstantWX.contactsList console.log('初始化默认数据成功,长度:', this.homeList.length); } catch (err) { console.error('初始化数据异常:', JSON.stringify(err)); this.homeList = []; } } // 强化版过滤逻辑 get filteredList(): Array<UserInfoBase> { try { // 1. 校验数据源基础格式 if (!Array.isArray(this.homeList)) { console.error('homeList不是数组,类型:', typeof this.homeList); return []; } if (this.homeList.length === 0) { console.log('homeList为空数组,返回空结果'); return []; } // 2. 处理搜索文本 const searchText = (this.searchText || '').trim(); if (!searchText) { console.log('搜索文本为空,返回全部数据'); return [...this.homeList]; // 返回副本避免引用问题 } // 3. 执行过滤(严格类型检查) const lowerSearchText = searchText.toLowerCase(); const result: UserInfoBase[] = []; for (const item of this.homeList) { // 逐个检查item合法性 if (!item || typeof item !== 'object') { console.warn('跳过非法item:', item); continue; } // 安全处理name属性 const itemName = typeof item.name === 'string' ? item.name.toLowerCase() : ''; if (itemName.includes(lowerSearchText)) { result.push(item); } } console.log(`搜索完成,关键词:${searchText},结果数:${result.length}`); return result; } catch (err) { // 打印完整错误堆栈 console.error('过滤逻辑异常:', JSON.stringify(err), (err as Error).stack); return []; } } build() { Column(){ Search({ placeholder: '搜索联系人' }) .width('90%') .backgroundColor(Color.White) .borderRadius(10) .searchButton('搜索') .placeholderColor('#999') .placeholderFont({ size: 16, weight: FontWeight.Normal }) .onSubmit((value: string) => { try { console.log('开始处理搜索提交,value:', value); this.searchText = value; // 直接使用同步计算的结果(避免setTimeout的异步问题) const resultCount = this.filteredList.length; console.log('搜索结果数量:', resultCount); // 严格按照文档要求调用showToast(参数必须正确) promptAction.showToast({ message: resultCount > 0 ? `找到${resultCount}个联系人` : '未找到匹配的联系人', duration: 1500, // 必须是1500或3000 bottom: 100 // 可选:设置显示位置,避免被键盘遮挡 }) } catch (err) { console.error('搜索提交异常:', JSON.stringify(err), (err as Error).stack); // 简化错误提示的调用参数,确保不抛错 promptAction.showToast({ message: '搜索失败', duration: 1500 }); } }) .onChange((value: string) => { this.searchText = value; }) .margin({ top: 10 }) //this.filteredList List() { ForEach(this.homeList,(item: UserInfoBase) => { ListItem(){ Column({space: 8}) { Row({ space: 20 }) { Image(item.img) .width(40) .height(50) .objectFit(ImageFit.Contain) .borderRadius(5) .onClick(() => { router.pushUrl({ url: 'pages/Index', }) }) Text(item.name) .onClick(() => { // 页面跳转并传递参数 router.pushUrl({ url: 'pages/weixin/WxList', // 目标页面路径 params: { user: item // 需要传递的参数 } }, router.RouterMode.Single) // 可选参数,指定路由模式 .then(() => { console.log('页面跳转成功'); }).catch(() => { console.log('页面跳转失败:'); promptAction.showToast({ message: '页面跳转失败', duration: 2000 }) }) }) } .justifyContent(FlexAlign.Start) Row(){ Divider() .height(0.5) .backgroundColor(Color.Gray) } }.alignItems(HorizontalAlign.Start) } } //(item) => item.id?.toString() || `key-${Math.random()}` ) } .flexGrow(1) .width('100%') .margin({ top: 10 }) } .width('100%') .height('100%') .backgroundColor('#ffd7d6d6') } }
第三种:
import { it } from '@ohos/hypium' import { UserInfoBase } from '../constant/UserInfoBase' import { CommonConstantWX } from '../constant/CommonConstantWX' import { router } from '@kit.ArkUI' import promptAction from '@ohos.promptAction' @Entry @Component struct WXHome { @State homeList: Array<UserInfoBase> = CommonConstantWX.contactsList @State searchList:Array<UserInfoBase>=[] //变量承载输入框的内容 @State mContent: string = '' //创建控制器,控制信息展示最新信息 private listScroller: Scroller = new Scroller() //创建变量,控制信息为对方还是自己发的信息 @State mCategory: number = 0 build() { Column(){ Search({placeholder: '搜索'}) .width('90%') .backgroundColor(Color.White) .borderRadius(10) .onChange((value: string) => { //清除之前搜索到数据 this.searchList = [] //处理到底找到了几条符合数据 let searchCount = 0 //进行便利查找 for(let index = 0;index < this.homeList.length; index ++ ){ const element = this.homeList[index] //进行判断 if (element.name?.indexOf(value) != -1) { searchCount ++ //相同数据填充到新数组里 this.searchList.push(element) } } //没有找到相应数据 if (searchCount === 0) { this.searchList.push({ id: 999, name:"没有找到相应用户", img: $r('app.media.avatar_icon') }) } }) /*//搜索框按钮 .searchButton('搜索') //提示词的设置文本颜色,大小, .placeholderColor(Color.Red) .placeholderFont({size: 20,weight: 700}) //提交逻辑,点击放大镜和搜索按钮都会触发 .onSubmit(() => { console.log('点击了提交'); }) //文本改变的逻辑,在输入框输入或者删除都会触发 .onChange((value: string) => { console.log('文本改变' + value); })*/ List({space: 10,scroller: this.listScroller}){ ForEach(this.searchList.length === 0 ?this.homeList : this.searchList,(item: UserInfoBase) => { ListItem(){ Column({space: 8}) { Row({ space: 20 }) { Image(item.img) .width(40) .height(50) .objectFit(ImageFit.Contain) .borderRadius(5) .onClick(() => { router.pushUrl({ url: 'pages/Index', }) }) Text(item.name) .onClick(() => { // 页面跳转并传递参数 router.pushUrl({ url: 'pages/weixin/WxList', // 目标页面路径 params: { user: item // 需要传递的参数 } }, router.RouterMode.Single) // 可选参数,指定路由模式 .then(() => { console.log('页面跳转成功'); }).catch(() => { console.log('页面跳转失败:'); promptAction.showToast({ message: '页面跳转失败', duration: 2000 }) }) }) } //.padding({top:10,bottom:10}) .margin({left:10}) .justifyContent(FlexAlign.Start) Row(){ Divider() .height(0.5) .backgroundColor(Color.Gray) } }.alignItems(HorizontalAlign.Start) }.margin({bottom:10}) }) } .padding({bottom:50}) } .width('100%') .height('100%') .backgroundColor('#ffd7d6d6') } }
/** # 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 '../../pages/constant/UserInfoBase' import { router } from '@kit.ArkUI'; import { TodoTitleNameUtils } from '../../pages/utils/TodoTitleNameUtils' import { trustedAppService } from '@kit.DeviceSecurityKit'; import { CommonConstantWX } from '../../pages/constant/CommonConstantWX' import { UserMessageBase } from '../../pages/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; //变量承载输入框的内容 @State mContent: string = '' //创建控制器,控制信息展示最新信息 private listScroller: Scroller = new Scroller() //创建变量,控制信息为对方还是自己发的信息 @State mCategory: number = 0 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({space: 10,scroller: this.listScroller}) { 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) .padding({left:5}) .objectFit(ImageFit.Contain) .onClick(() => { router.pushUrl({ url: 'pages/weixin/WXHome', }) }) // 输入框 TextInput({ placeholder: '请输入消息...',text:this.mContent}) .id('WxListHelloWorld') .fontSize($r('app.float.page_text_font_size')) .fontWeight(FontWeight.Normal) .backgroundColor('#ffffff') .borderRadius(20) // 圆角输入框 .padding({ left: 16, right: 16 }) // 文本内边距 .onChange((value:string)=>{ this.mContent = value }) .flexGrow(1) // 自动填充剩余空间 .width('75%') // 发送按钮 //如果输入框里面有内容,隐藏图片,显示发送按钮 //.trim()去掉空格 length判断文本长度 if (!this.mContent || this.mContent.trim().length === 0){ Button('+') .fontSize(18) .width(40) .height(40) .borderRadius(20) // 圆形按钮 .padding({right:15}) .margin({right:5}) .backgroundColor('#07C160') // 微信绿 //.textStyle({ color: '#ffffff' }) .onClick(() => { //router.back() this.message = this.users?.name || ""; //点击发送按钮,发送信息 this.messagelist.push({ id: 7, img: this.mCategory % 2 === 0 ? this.users.img : $r("app.media.avatar_icon1"), content: this.mContent, category: this.mCategory % 2 === 0 ? 0 : 1 }) }) } else { Button() { Text('发送') .fontSize(12) .fontColor(Color.White) .onClick(()=>{ //router.back() this.message = this.users?.name || ""; //点击发送按钮,发送信息 this.messagelist.push({ id: 7, img: this.mCategory % 2 === 0 ? this.users.img : $r("app.media.avatar_icon1"), content: this.mContent, category: this.mCategory % 2 === 0 ? 0 : 1 }) //清空输入框数据 this.mContent = '' this.listScroller.scrollToIndex(this.messagelist.length -1) this.mCategory ++ }) } } } .margin({ top: 8, left: 12, right: 12, bottom: 8 }) // 整体外边距 .height(50) // 合适的高度 .backgroundColor('#f5f5f5') // 浅灰背景 .alignItems(VerticalAlign.Center) // 垂直居中对齐 .width('100%') } } }
/** # 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 { UserInfoBase } from '../constant/UserInfoBase' import { router } from '@kit.ArkUI'; @Component//表示组件 export default struct WxControl { @Prop useritem: UserMessageBase; @Prop userinfo: UserInfoBase; build() { // 外层Row设置主轴靠右对齐,确保内部元素整体靠右 Row() { if(this.useritem.category===0) { Image(this.userinfo.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', params: { user: this.useritem // 需要传递的参数 } }) }) .width('70%') if(this.useritem.category===1) { Image(this.useritem.img) .ImgExtend() // 移除不必要的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}) } } @Extend(Image) function ImgExtend() { .width(40) .height(50) .margin({ left: 8 }) .borderRadius(5) .objectFit(ImageFit.Contain) }
页面转值和获值
.onClick(() => { router.pushUrl({ url: 'pages/weixin/WXChatDetailsPage', params: { userInfo: item } })
获取值
let params = router.getParams() as Record<string,UserInfoBase> let mUserInfo = params.userInfo
import socket from '@ohos.net.socket'; import util from '@ohos.util'; import promptAction from '@ohos.promptAction' import fs from '@ohos.file.fs'; import picker from '@ohos.file.picker'; import web_webview from '@ohos.web.webview'
帮助文档:
https://docs.openharmony.cn/pages/v5.1/zh-cn/application-dev/reference/apis-arkui/arkui-ts/ts-container-waterflow.md
https://developer.huawei.com/consumer/cn/doc/harmonyos-references/ohos-arkui-advanced-dialog
哲学管理(学)人生, 文学艺术生活, 自动(计算机学)物理(学)工作, 生物(学)化学逆境, 历史(学)测绘(学)时间, 经济(学)数学金钱(理财), 心理(学)医学情绪, 诗词美容情感, 美学建筑(学)家园, 解构建构(分析)整合学习, 智商情商(IQ、EQ)运筹(学)生存.---Geovin Du(涂聚文)