鸿蒙Next仓颉语言开发实战教程:聊天列表

布局王
• 阅读 3

昨天分享了消息列表页面,今天继续分享聊天页面的开发过程: 鸿蒙Next仓颉语言开发实战教程:聊天列表 这个页面又是常见的上中下布局,从上至下依次为导航栏、聊天列表和输入框工具栏,我们可以先写一下简单的结构,最上面导航栏是横向布局,所以写个Row容器,中间是List,底部仍然是Row容器,导航栏和底部输入框的高度是固定的,List不确定,所以给List设置layoutWeight属性它自动撑满屏幕,具体代码是这样的:

Row{

}
.width(100.percent)
.height(60)
List{

}
.width(100.percent)
.layoutWeight(1)
Row{

}
.width(100.percent)
.height(50)

整体结构写好了,剩下的工作就是分别丰富每一部分的内容,导航栏部分为了使标题绝对居中,所以我将Row换为Stack容器:

Stack {
     Text('消息')
    .fontSize(16)
    .fontWeight(FontWeight.Bold)
    .fontColor(Color.BLACK)
    Row{
         Image(@r(app.media.back))
    .width(27)
    .height(27)
     .onClick({evet => Router.back()})
    }.width(100.percent).justifyContent(FlexAlign.Start).padding(left:5)
}
.width(100.percent)
.height(60)
.backgroundColor(Color.WHITE)

消息列表部分要考虑到消息是本人发送的还是别人发送的,以此区分内容靠左还是靠右,还要考虑到消息内容过长时的屏幕适配问题,可以使用约束属性和设置内容的最大和最小尺寸,消息列表组件的具体代码如下:

package ohos_app_cangjie_entry.components
internal import ohos.base.*
internal import ohos.component.*
internal import ohos.state_manage.*
import ohos.state_macro_manage.*
import cj_res_entry.app
import ohos_app_cangjie_entry.model.ChatItem
@Component
public class chatrow {
    @Link var model:ChatItem
    func build() {
        Column(){
            Row{
                            Text(model.getSendTime())
                            .fontColor(Color.GRAY)
                            .fontSize(13)
                        }
                        .width(100.percent)
                        .alignItems(VerticalAlign.Center)
                        .justifyContent(FlexAlign.Center)

                if(model.getFrom() == 'I'){
                 Row(8){
                      Image(@r(app.media.ih1))
                        .width(34)
                        .height(34)
                        .borderRadius(17)
                        .backgroundColor(Color.GRAY)
                    Column(5){
                            Text(model.getName())
                            .fontSize(14)
                            .fontColor(0x4a4a4a)
                            Text(model.getContent())
                            .backgroundColor(Color(237,237,237))
                            .padding(8)
                            .fontColor(Color.BLACK)
                            .fontSize(15)
                            .borderRadius(6)
                                .constraintSize(minWidth: 20.vp, maxWidth: 60.percent)
                        }
                        .alignItems(HorizontalAlign.Start)
                     }
                    .alignItems(VerticalAlign.Top)
                }else if(model.getFrom() == 'D'){

                Row(8){
                    Column(5){
                            Text(model.getName())
                            .fontSize(14)
                            .fontColor(0x4a4a4a)
                            Text(model.getContent())
                            .backgroundColor(0xd84642)
                            .padding(8)
                            .fontColor(Color.WHITE)
                            .fontSize(15)
                            .borderRadius(6)
                                .constraintSize(minWidth: 20.vp, maxWidth: 60.percent)
                        }
                        .alignItems(HorizontalAlign.End)
                    Image(@r(app.media.ih2))
                        .width(34)
                        .height(34)
                        .borderRadius(17)
                        .backgroundColor(Color.GRAY)
                     }
                    .alignItems(VerticalAlign.Top)
                .width(100.percent)
                .justifyContent(FlexAlign.End)
            }
        }
        .alignItems(HorizontalAlign.Start)
    }
}

最后是输入框部分,比较难的应该是上方阴影和聊天框语音框的切换,仓颉中阴影的设置依然使用shadow属性,输入框的切换使用if语句控制即可,这一部分的具体代码如下:

Row(6){
if(inputText){
     Image(@r(app.media.barvoice))
    .width(30)
    .height(30)
    .borderRadius(15)
    .onClick({evet =>
        inputText = false
        })
     TextInput()
    .height(36)
    .borderRadius(18)
    .backgroundColor(Color(237,237,237))
    .layoutWeight(1)
}else {
     Image(@r(app.media.bartxt))
    .width(30)
    .height(30)
    .borderRadius(15)
    .onClick({evet =>
        inputText = true
        })
    Text('按住讲话')
     .height(36)
    .borderRadius(18)
    .backgroundColor(Color(237,237,237))
    .layoutWeight(1)
    .textAlign(TextAlign.Center)
}
    Image(@r(app.media.barimg))
    .width(30)
    .height(30)
    .borderRadius(15)
}
.width(100.percent)
.height(46)
.alignItems(VerticalAlign.Center)
.padding(left:12,right:12)
.borderWidth(EdgeWidths( top: 0.5.vp))
.borderStyle(BorderStyle.Solid)
.borderColor(Color(216,216,216))
.shadow(radius: 23, color: Color(230,230,230), offsetX: 0, offsetY: -20)

今天的内容就是这样,感谢阅读。##HarmonyOS语言##仓颉##购物#

点赞
收藏
评论区
推荐文章
布局王 布局王
9小时前
鸿蒙仓颉开发语言实战教程:实现商城应用首页
经过了几天的入门教程,我们终于进入到了仓颉开发语言的实战环节,今天分享的内容是实现商城应用的首页页面,效果图如下:首页的内容包括导航栏、轮播图、商品分类和商品列表,我们下面逐一介绍。导航栏仓颉语言中是没有导航栏组件的,我们需要自己去开发。此处的导航栏也比较
布局王 布局王
9小时前
鸿蒙仓颉语言开发实战教程:购物车页面
大家上午好,仓颉语言商城应用的开发进程已经过半,不知道大家通过这一系列的教程对仓颉开发是否有了进一步的了解。今天要分享的购物车页面:看到这个页面,我们首先要对它简单的分析一下。这个页面一共分为三部分,分别是导航栏、购物车列表和底部的结算栏。也能它们是col
布局王 布局王
9小时前
鸿蒙仓颉语言开发实战教程:商城搜索页
大家下午好,今天要分享的是仓颉语言商城应用的搜索页。搜索页的内容比较多,都有点密集恐惧症了,不过我们可以从上至下将它拆分开来,逐一击破。导航栏搜索页的的最顶部是导航栏,由返回按钮和搜索框两部分组成,比较简单,具体实现代码如下:Row(6)Image(@r(
布局王 布局王
9小时前
鸿蒙Next仓颉语言开发实战教程:店铺详情页
各位早上好,幽蓝君又来分享仓颉开发教程了,今天的内容是店铺详情页:这个页面的内容看似简单,其实有很多小细节需要注意,主要还是让大家熟悉List容器的使用。整个页面由导航栏和List容器两大部分组成,导航栏我们已经分享过多次,今天不再赘述。主要说一下List
布局王 布局王
9小时前
鸿蒙Next仓颉语言开发实战教程:订单列表
大家上午好,最近不断有友友反馈仓颉语言和ArkTs很像,所以要注意不要混淆。今天要分享的是仓颉语言开发商城应用的订单列表页。首先来分析一下这个页面,它分为三大部分,分别是导航栏、订单类型和订单列表部分。导航栏由返回按钮和搜索框组成,这里要注意组件横向占满屏
布局王 布局王
9小时前
鸿蒙Next仓颉语言开发实战教程:设置页面
仓颉语言商城应用的页面开发教程接近尾声了,今天要分享的是设置页面:导航栏还是老样式,介绍过很多次了,今天不再赘述。这个页面的内容主要还是介绍List容器的使用。可以看出列表内容分为三组,所以我们要用到ListItemGroup,不过第一组是没有标题的,所以
布局王 布局王
9小时前
鸿蒙Next仓颉语言开发实战教程:消息列表
大家周末好,今天要分享的是仓颉语言开发商城应用实战教程的消息列表页面。这个页面的导航栏和之前有所不同,不过难度并没有增加,只是标题移到了左边,我们使用两端对齐方式就能实现,导航栏部分的具体代码如下:Row(8)Text('消息').fontSize(16)
布局王 布局王
9小时前
HarmonyOS NEXT仓颉开发语言实战案例:简约音乐播放页
偶然间看到一个非常漂亮的音乐播放器设计图,忍不住想拿仓颉语言来练练手,当漂亮的设计图遇到优美的开发语言,简直是天作之合。看到这个页面,我们先做一个简单的分析。整个页面分为上中下三个部分,顶部为导航栏,底部是歌词工具栏,剩下的就是中间的歌曲信息和控制按钮部分
布局王 布局王
9小时前
HarmonyOS NEXT仓颉开发语言实战案例:动态广场
大家好,今日要分享的是使用仓颉语言开发动态广场页面,也比较像朋友圈页面:整个页面分为两部分,分别是导航栏和状态列表,导航栏比较简单,我们可以先写下导航栏的具体代码和页面的基本结构:ColumnRow(10)Text('推荐').fontColor(Colo
布局王 布局王
9小时前
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
各位周末好,今天为大家来仓颉语言外卖App的实战分享。我们可以先分析一下页面的布局结构,它是由导航栏和List容器组成的。幽蓝君目前依然没有找到仓颉语言导航栏的系统组件,还是要自定义,这个导航栏有三部分内容,可以使用两端对齐,要注意的是,如果需要中间部分在