当前位置: 首页 > news >正文

鸿蒙开发实战:使用 List 组件构建新闻列表

文章目录

    • 一、引言
    • 二、效果预览与整体结构
    • 三、核心代码实现
      • 3.1 数据模型
      • 3.2 主页面布局
      • 3.3 自定义新闻卡片组件
    • 四、关键知识点解析
      • 4.1 `List` 组件的子元素限制
      • 4.2 文本溢出处理
      • 4.3 `Span` 组件的妙用
    • 五、总结

这是一个使用鸿蒙技术开发的本地原生记账应用,非常适合大家用来练手。相关源码已上传至 Github,点击此处查看项目。欢迎大家交流、指正,也欢迎提交 PR。

一、引言

在鸿蒙应用开发中,List组件是构建长列表场景的核心组件。无论是新闻列表、设置页面还是聊天记录,都离不开它。本文将通过一个模仿新闻列表的实战案例,带你快速掌握List组件的核心用法。

二、效果预览与整体结构

我们先来看一下最终要实现的效果:页面顶部是一个搜索框(TextInput),下方是一个新闻列表(List)。列表中的每一个条目都是一条新闻,包含新闻标题、作者和发布时间。

整体布局结构如下:

  • TextInput:作为搜索框,位于页面顶部。
  • List:作为列表容器,位于搜索框下方。
  • ForEach:遍历新闻数据数组,动态生成列表项。
  • 自定义子组件:每个列表项都是一个自定义组件,用于展示单条新闻的标题、作者和发布时间。

三、核心代码实现

3.1 数据模型

首先,我们需要定义一个新闻数据模型,用于存储新闻标题、作者和发布时间。

// NewsItem.etsexportinterfaceNewsItem{title:string;author:string;publishTime:string;}

3.2 主页面布局

接下来,我们编写主页面,包含TextInputList组件。

// Index.etsimport{NewsItem}from'./NewsItem';@Entry@Componentstruct Index{@StatenewsList:NewsItem[]=[{title:'鸿蒙生态再添新成员,多家头部应用宣布适配',author:'科技日报',publishTime:'2026-06-26 10:00'},{title:'华为开发者大会亮点回顾:HarmonyOS NEXT 正式发布',author:'IT之家',publishTime:'2026-06-25 15:30'},{title:'深入理解 ArkTS 语法:状态管理与数据驱动 UI 更新',author:'鸿蒙开发者社区',publishTime:'2026-06-24 09:00'},{title:'从零开始搭建鸿蒙应用:开发环境配置与第一个 Hello World',author:'CSDN 博主',publishTime:'2026-06-23 14:20'},{title:'鸿蒙原生应用上架流程详解:从签名到审核全攻略',author:'华为开发者联盟',publishTime:'2026-06-22 11:45'},{title:'ArkUI 动画实战:打造流畅的页面转场与交互动效',author:'鸿蒙技术周刊',publishTime:'2026-06-21 16:00'},{title:'鸿蒙分布式技术入门:跨设备数据同步与任务迁移',author:'开发者头条',publishTime:'2026-06-20 08:30'},{title:'性能优化实战:鸿蒙应用冷启动速度提升 50% 的秘诀',author:'技术博客',publishTime:'2026-06-19 13:10'},{title:'鸿蒙安全机制解析:权限管理、数据加密与隐私保护',author:'安全研究',publishTime:'2026-06-18 09:50'},{title:'从 Web 到鸿蒙:前端开发者快速上手 ArkTS 指南',author:'前端之巅',publishTime:'2026-06-17 17:25'},];build(){Column(){// 搜索框TextInput({placeholder:'搜索新闻...'}).width('100%').height(40).margin({bottom:10})// 新闻列表List(){ForEach(this.newsList,(item:NewsItem)=>{ListItem(){NewsCard({newsItem:item})}},(item:NewsItem)=>item.title)}.width('100%').height('100%')}.padding(10).width('100%').height('100%')}}

3.3 自定义新闻卡片组件

每个新闻条目都是一个独立的@Component,我们将其命名为NewsCard。它包含新闻标题、作者和发布时间。

// NewsCard.etsimport{NewsItem}from'./NewsItem';@Componentexportstruct NewsCard{@PropnewsItem:NewsItem;build(){Column(){// 新闻标题:最多显示两行,超出显示省略号Text(this.newsItem.title).fontSize(16).fontWeight(FontWeight.Bold).maxLines(2).textOverflow({overflow:TextOverflow.Ellipsis}).width('100%')// 作者和发布时间Row(){Text(){Span(this.newsItem.author).fontSize(12).fontColor(Color.Gray)Span(' | ').fontSize(12).fontColor(Color.Gray)Span(this.newsItem.publishTime).fontSize(12).fontColor(Color.Gray)}.fontSize(12).fontColor(Color.Gray)}.width('100%').margin({top:8})}.padding(12).width('100%').backgroundColor(Color.White).borderRadius(8).margin({bottom:8})}}

运行效果:

四、关键知识点解析

4.1List组件的子元素限制

List组件的子元素不能是任意组件,它必须是ListItemListItemGroup。如果你尝试在List中直接放置一个ColumnText,编译器会报错。

// ❌ 错误写法List(){Column(){// 报错:List 的子元素只能是 ListItem 或 ListItemGroup// ...}}// ✅ 正确写法List(){ListItem(){Column(){// ...}}}

4.2 文本溢出处理

当新闻标题过长时,我们使用maxLinestextOverflow属性来控制显示行数和溢出后的省略号效果。

Text(this.newsItem.title).maxLines(2)// 最大显示两行.textOverflow({overflow:TextOverflow.Ellipsis})// 超出显示省略号

4.3Span组件的妙用

在显示作者和发布时间时,我们使用了Span组件包裹在Text组件内部。这样做的好处是:

  • 样式统一Span可以继承父级Text组件的样式(如字体大小、颜色)。
  • 代码简洁:如果写成两个独立的Text组件,需要重复设置相同的样式属性。
// ✅ 推荐写法:使用 Span 组件Text(){Span(this.newsItem.author)Span(' | ')Span(this.newsItem.publishTime)}// ❌ 不推荐写法:多个 Text 组件,代码冗余Text(this.newsItem.author)Text(' | ')Text(this.newsItem.publishTime)

五、总结

通过本文的实战案例,我们学习了如何在鸿蒙应用中使用List组件构建一个新闻列表。关键点总结如下:

  1. List的子元素必须是ListItemListItemGroup
  2. 使用ForEach遍历数据数组,动态渲染列表项
  3. 利用maxLinestextOverflow处理文本溢出
  4. 使用Span组件简化相同样式的文本布局

掌握了这些核心用法,你就可以轻松应对各种列表场景的开发需求了。

http://www.jsqmd.com/news/1220662/

相关文章:

  • K8s 高可用集群部署
  • 2026丽水市里卫生间漏水、阳台漏水、楼顶漏水、地下室渗水、阳光房漏水哪家防水公司做的好!核心靠谱公司推荐 - 吉林同城获客
  • 如何快速解密音乐文件:浏览器端音频解锁工具的终极指南
  • 【GLM-5终极评测报告】:20年NLP工程师亲测的5大颠覆性新功能与落地避坑指南
  • 伯爵中国官方售后服务中心|服务热线与详细地址权威信息通知(2026年7月最新) - 亨得利官方服务中心
  • PowerShellEditorServices社区贡献指南:如何参与这个开源项目
  • 分布式计算课程知识点总结
  • 官网发布 2026积家官方售后细则,保养收费表、维修周期、正规网点清单全公开 - 积家中国服务中心
  • 掌握xamarin-forms-book-samples导航系统:MasterDetail与TabbedPage实战
  • Flask-Login用户认证配置与安全实践指南
  • 如何去水印图片?有哪些手机电脑在线都能用的工具 - 科技热点发布
  • 黑苹果EFI配置终极简化:15分钟用OpCore-Simplify搞定OpenCore配置
  • 2026长沙家里卫生间漏水、阳台漏水、楼顶漏水、地下室渗水、阳光房漏水靠谱防水公司推荐 - 吉林同城获客
  • 鸿蒙应用开发实战:轻松实现列表上拉加载更多
  • 嵌入式代码 AddressSanitizer 集成实战:Cortex-M 上的堆栈溢出检测红区与 Shadow Memory 机制
  • 如何在macOS上高效制作Windows启动盘:WinDiskWriter完整实用指南
  • 权威靠谱!2026年7月卡地亚官方售后维修网点咨询电话,官方门店地址一览 - 卡地亚官方维修中心
  • 【独家首发】GLM-4-Flash vs GLM-4-Air性能横评:12项基准测试(MMLU、C-Eval、Gaokao-Bench)结果首度公开
  • AM64x/AM243x UART高级应用:IrDA与CIR模式配置实战指南
  • 中山街坊看过来!金价狂飙,闲置黄金别压箱底,这6家靠谱黄金回收点覆盖全城! - 新芸鼎珠宝首饰
  • 恩施防水修缮优选|筑宅安99.5高分五星品牌,专治雨季各类漏水难题 - 筑宅安
  • RO反渗透复合滤芯净饮机
  • 鸿蒙原生开发手记:徒步迹 - @ohos.data.relationalStore 数据库
  • 哈尔滨甲醛检测治理公司哪家靠谱?多方对比家装除甲醛优劣,安心居环保专业度实测分析 - 专注室内空气检测治理
  • static_status部署指南:在Linux服务器上设置自动化状态监控
  • 紧急通知:Kimi v2.3.7起PDF分块逻辑重大更新!未适配的旧指令将导致关键段落丢失(含迁移检查清单+兼容性验证脚本)
  • HarmonyOS Next 鸿蒙应用弹框和提示气泡详解
  • 终极免费macOS光标主题:为Windows和Linux系统注入苹果设计美学
  • 【Kimi网页分析功能深度解密】:20年老炮亲测的5大隐藏技巧,90%用户从未用过!
  • 通往具身智能之路——TVA协同进化机制(20)