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

简介: 本文分享了 HarmonyOS 仓颉语言实现聊天页面布局的全过程,包括顶部导航栏、动态消息列表及底部输入框的设计与代码实现,详细讲解了上中下结构布局、消息方向区分、阴影设置等内容。

昨天分享了消息列表页面,今天继续分享聊天页面的开发过程:
image.png

这个页面又是常见的上中下布局,从上至下依次为导航栏、聊天列表和输入框工具栏,我们可以先写一下简单的结构,最上面导航栏是横向布局,所以写个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语言##仓颉##购物#

相关文章
|
2月前
|
监控 JavaScript 编译器
从“天书”到源码:HarmonyOS NEXT 崩溃堆栈解析实战指南
本文详解如何利用 hiAppEvent 监控并获取 sourcemap、debug so 等核心产物,剖析了 hstack 工具如何将混淆的 Native 与 ArkTS 堆栈还原为源码,助力开发者掌握异常分析方法,提升应用稳定性。
432 40
|
2月前
|
移动开发 前端开发 Android开发
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
304 12
【02】建立各项目录和页面标准化产品-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
移动开发 JavaScript 应用服务中间件
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
270 5
【06】优化完善落地页样式内容-精度优化-vue加vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
移动开发 Rust JavaScript
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
631 4
【01】首页建立-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
|
2月前
|
移动开发 Android开发
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
【03】建立隐私关于等相关页面和内容-vue+vite开发实战-做一个非常漂亮的APP下载落地页-支持PC和H5自适应提供安卓苹果鸿蒙下载和网页端访问-优雅草卓伊凡
165 0
|
3月前
鸿蒙应用开发从入门到实战(十六):线性布局案例
ArkUI提供了丰富的系统组件,用于制作鸿蒙原生应用APP的UI,本文通过简单案例演示如何使用Column和Row组件实现线性布局。
175 1
|
3月前
|
传感器 监控 安全
HarmonyOS NEXT 5.0 的星闪(NearLink)开发应用案例
V哥分享HarmonyOS NEXT 5.0星闪开发实战,涵盖智能车钥匙无感解锁与工业传感器监控。低延迟、高可靠,代码完整,速来学习!
556 0
|
6月前
|
容器
HarmonyOS NEXT仓颉开发语言实战案例:外卖App
仓颉语言实战分享,教你如何用仓颉开发外卖App界面。内容包括页面布局、导航栏自定义、搜索框实现、列表模块构建等,附完整代码示例。轻松掌握Scroll、List等组件使用技巧,提升HarmonyOS应用开发能力。
|
5月前
|
安全 JavaScript API
鸿蒙开发核心要素
鸿蒙开发核心要素
|
6月前
|
存储 IDE 定位技术
【HarmonyOS 5】鸿蒙组件&模板服务详解 - 助力高效开发的利器
在移动应用开发领域,效率与质量始终是开发者追求的核心目标。鸿蒙系统作为新兴的操作系统,为开发者提供了丰富且强大的开发资源,其中鸿蒙组件&模板服务更是成为开发者快速构建高质量应用的得力助手。
233 0

热门文章

最新文章