鸿蒙开发实战:仿网易新闻客户端,从零搭建新闻列表与详情页 原创

鸿蒙开发实战:仿网易新闻客户端,从零搭建新闻列表与详情页

原创

鸿蒙开发实战:仿网易新闻客户端,从零搭建新闻列表与详情页 原创

• 1003浏览

鸿蒙开发实战:仿网易新闻客户端,从零搭建新闻列表与详情页

引言

随着鸿蒙系统(HarmonyOS)的不断普及,越来越多的开发者开始关注鸿蒙应用开发。ArkUI作为鸿蒙的声明式UI框架,提供了丰富的组件和简洁的语法,让开发者能够高效构建跨设备应用。本文将带领大家通过一个完整的实战项目——仿网易新闻客户端,从零开始搭建新闻列表页和详情页,掌握ArkUI的核心用法,并实现页面间跳转与数据传递。

📦 完整项目代码已开源 :为了让你能更方便地对照学习和实践,我将本项目的全部源码托管在了 Gitee 上。你可以直接克隆或下载:👉

项目运行效果如下图所示,包含轮播图、新闻列表、详情展示等常见功能。

![运行效果截图]

图1:新闻列表页(轮播图+新闻条目)

图2:新闻详情页

项目结构

本项目包含三个核心文件:

  • NewsInfo.ets:定义数据模型(IBannerINews)和模拟数据(bannerInfonewsInfo)。

  • NewsCase.ets:新闻列表主页,包含头部搜索栏、轮播图和新闻列表。

  • NewsDetailCase.ets:新闻详情页,展示新闻完整内容。

数据模型与模拟数据

首先定义两个接口,分别用于轮播图项和新闻项:

// NewsInfo.ets
interface INews {
title: string;
author: string;
time: string;
area: string;
imagefirst?: string | Resource; // 可选,新闻配图
msgcount: number; // 跟帖数
content: string;

interface IBanner {
id: number;
image: string | Resource;
alt: string;
接着准备模拟数据,其中新闻内容可以复用同一段文字(实际开发中应从网络获取)。轮播图使用本地图片路径(需提前放入images目录)。

let bannerInfo: Array = [
{ id: 1, image: '/images/xin1.jpg', alt: 'NBA最富老板建球场,最在意的是厕所?' },

let newsInfo: Array = [
title: '日本加强与欧洲军事互动 专家:仍不放弃“亚洲版北约”构想',
author: '国际在线',
time: '2024-11-03 19:23',
imagefirst: '/images/xw1.jpg',
msgcount: 2,
area: '北京',
content: 下周美国大选对于黄金走势很关键... // 省略详细内容
// ... 更多新闻

新闻列表主页(NewsCase.ets)

主页由上到下分为三部分:顶部操作栏、轮播图、新闻列表。

1. 顶部操作栏

使用Row横向布局,包含网易logo、搜索框和联系人按钮。搜索框通过Search组件实现,并自定义占位文本颜色和搜索图标。

Row({ space: 5 }) {
Image($r('app.media.163_logo')).width(40);
Search({ placeholder: '输入查询内容' })
.layoutWeight(1)
.backgroundColor(Color.White)
.placeholderColor("#ffa29f9f")
.searchIcon({ color: "#ff9d9a9a" });
Button() {
Image($r('app.media.ic_public_contacts'))
.fillColor(Color.White)
.aspectRatio(1);
.backgroundColor('#000000')
.backgroundColor(Color.Red)
.width('100%');

2. 轮播图(Swiper)

使用Swiper组件自动轮播图片,通过ForEach遍历bannerInfo数组动态生成。设置自动播放、间隔1秒、无限循环等属性。

Swiper(this.swiperController) {
ForEach(this.bannerInfo, (item: IBanner) => {
Image(item.image)
.alt($r('app.media.xin1'));
}, (item: IBanner): string => String(item.id));
.autoPlay(true)
.interval(1000)

3. 新闻列表(List)

新闻列表使用List组件,每个列表项为ListItem,内部采用Row横向布局,左侧是标题、作者、跟帖数,右侧是缩略图。关键点:

  • 标题最多显示两行,超出省略号(maxLines(2) + textOverflow)。

  • 跟帖数超过1万时显示为“X万”格式。

  • 点击列表项通过router.pushUrl跳转到详情页,并将当前新闻对象作为参数传递。

List() {
ForEach(this.newsInfo, (item: INews) => {
ListItem() {
Row({ space: 5 }) {
Column() {
Text(item.title)
.fontWeight(600)
.textOverflow({ overflow: TextOverflow.Ellipsis });
Row() {
Text(item.author).margin({ right: 10 }).fontColor('#999');
Text(item.msgcount < 10000 ?
String(item.msgcount) : (item.msgcount / 10000).toFixed(1) + '万')
.fontColor('#999');
Text('跟帖').fontColor('#999');
.width('100%');
.justifyContent(FlexAlign.SpaceBetween)
.layoutWeight(1);

Image(item.imagefirst)
.alt($r('app.media.xin1'))
.aspectRatio(1);
.border({ width: { bottom: 1 } })
.borderColor('#eee')
.onClick(() => {
router.pushUrl({
url: 'pages/NewsDetailCase',
params: item
.width('100%');

新闻详情页(NewsDetailCase.ets)

详情页接收主页传递的新闻对象,并展示完整内容。

1. 页面生命周期获取参数

onPageShow中通过router.getParams()获取参数并赋值给状态变量news

@State news: INews = {} as INews;

onPageShow(): void {
this.news = router.getParams() as INews;

2. 布局结构

使用Navigation组件作为容器,设置标题模式为Mini,标题为新闻标题。顶部显示作者、时间、地区,中间显示新闻图片(如果有)和滚动内容。

Navigation() {
Column() {
// 头部作者信息
Row() {
Image($r('app.media.news_logo_img')).width(32);
Column() {
Text(this.news.author);
Text(${this.news.time}·${this.news.area})
.fontColor('#999');
.layoutWeight(1)
.alignItems(HorizontalAlign.Start);

// 新闻图片(如果有)
if (this.news.imagefirst) {
Image(this.news.imagefirst)

// 新闻内容滚动区域
Scroll() {
Text(this.news.content);
.margin({ top: 10 })
.layoutWeight(1);
.height('100%')
.width('100%');
.titleMode(NavigationTitleMode.Mini)
.title(this.news.title);

3. 细节优化

  • 内容区域使用Scroll组件,确保长内容可滚动。

  • 图片路径处理:使用$r引用资源或直接字符串路径,需确保资源存在。

运行效果与测试

🔧 快速开始

如果你想直接运行这个项目,可以按照以下步骤操作:

  1. 下载开发工具 :访问华为开发者官网,下载并安装最新版本的 DevEco Studio

  2. 配置环境 :在 DevEco Studio 中设置好 HarmonyOS SDK 的路径。

  3. 克隆项目 :打开终端,执行以下命令将项目克隆到本地:
    git clone https://gitee.com/MFliuyangs/news.git

  4. 导入并运行 :在 DevEco Studio 中打开刚克隆的项目文件夹,连接模拟器或真机,点击运行按钮即可看到效果。

图3:列表页实际运行效果

图4:详情页实际运行效果

开发心得与优化方向

  1. 声明式UI的便利 :ArkUI的声明式语法让界面与状态绑定,数据变化自动更新UI,开发效率很高。

  2. 组件化思维 :将轮播图、列表项等拆分为独立组件,便于复用和维护。

  3. 路由传参router.pushUrl传递对象时,需确保对象可序列化(本例中INews满足要求)。

  4. 可优化点

  • 添加下拉刷新、上拉加载更多。

  • 网络请求真实数据,替换模拟数据。

  • 详情页增加

  • 优化图片加载占位和缓存。

结语

通过这个仿网易新闻客户端的实战,我们学习了ArkUI中常用的SwiperListNavigation等组件,掌握了页面路由和数据传递的方法。希望本文能帮助鸿蒙开发者快速入门,并激发更多创意。完整代码已放在

中,欢迎 Star 和 Fork,如果你有任何问题或建议,也欢迎在

Harmony OS APP

暂无回复

Redis:我是如何 客户端进行通信的

IIIIJDASHJF • 8148浏览 • 0回复

CAT客户端如何Apollo中读取配置?

万猫学社 • 7254浏览 • 0回复

#冲刺创作新星# [十二]简单Http客户端

左翼风发 • 9833浏览 • 3回复

【编程入门】仿 网易 新闻鸿蒙ArkTS版)

蓝不蓝编程 • 7856浏览 • 0回复

#HarmonyOS NEXT体验官#HarmoneyOS NEXT应用开发 实战仿xhs首页列表 详情》 原创

小黄要努力 • 5976浏览 • 0回复

应用浏览详情页场景性能优化案例

性能测试工具

滑动丢帧问题

滑动卡顿

superinsect • 8341浏览 • 0回复

HarmonyOS Next之仿 网易云APP实战 开发教程(上)

HarmonyOS Next

wuyanghcoa • 9266浏览 • 0回复

HarmonyOS Next之仿 网易云APP实战 开发教程(下)

harmonyos next

wuyanghcoa • 7138浏览 • 0回复

HarmonyOS NEXT应用开发 实战:玩鸿蒙App客户端 开发

客户端开发

特立独行的猫a • 1.1w浏览 • 0回复

#我的鸿蒙 开发手记#Atomgit 客户端 实战,开启鸿蒙 开发新旅程!

鸿蒙实战

登录注册

peterpan527 • 14.8w浏览 • 2回复

鸿蒙仓颉开发语言实战教程:实现商城应用详情页

鸿蒙仓颉

幽蓝计划 • 2023浏览 • 0回复

鸿蒙Next仓颉语言开发 实战教程:店铺详情页

鸿蒙仓颉

幽蓝计划 • 1043浏览 • 0回复

鸿蒙 新闻阅读器:多设备同步新闻 列表 阅读状态

进修的泡芙 • 1146浏览 • 0回复

仿盒马》app开发技术分享-- 商品详情页(10)

云数据库

鸿蒙小林 • 3413浏览 • 0回复

仿盒马》app开发技术分享-- 订单详情页(32)

云数据库

鸿蒙小林 • 3574浏览 • 0回复

仿盒马》app开发技术分享-- 回收订单详情页(46)

云数据库

鸿蒙小林 • 2048浏览 • 0回复

仿盒马》app开发技术分享-- 兑换商品订单详情页(80)

鸿蒙小林 • 1911浏览 • 0回复

鸿蒙5新闻 列表 实战:导航栏+卡片列表+分页加载

暗雨OL • 7693浏览 • 0回复

鸿蒙 开发 实战篇】HarmonyOS 6.0 蓝牙实现服务客户端通讯案例详解

威哥爱编程 • 2309浏览 • 1回复

互动

查看数
10

为您推荐的类似文章

当下不少求职者在线求职陷入“低效高耗”困境,根源在于陷入“岗位可见=匹配可用”的思维陷阱和“概率博弈式”海投的效能悖论。本文针对这些求职误区,提出四大求职策略:一是精准定位,通过垂直行业招聘平台、企业官方渠道、行业活动寻找目标岗位专属通道;二是优化简历,遵循“针对性+数据化+故事化”原则打造求职敲门砖;三是拓宽思路,可从边缘岗位、中小企业入手,或通过实习兼职积累经验;四是主动出击,制作求职档案、跟进沟通、参与线下活动展现求职诚意,助力求职者走出困境,打造清晰求职路径。

本文聚焦梅卡曼德(雄安)机器人科技股份有限公司商务与市场副总裁徐婷婷的创业故事。梅卡曼德是全球具身智能机器人领域的“独角兽”企业,其产品能为机器人装上“眼、脑、手”,自研的具身智能产品已在汽车、物流等多领域规模化落地。2024年,徐婷婷带领团队将公司总部从北京迁至雄安。她表示雄安将企业当作合伙人,高效包容、机会众多,让企业能安心扎根研发。徐婷婷亲历了企业从落地投产到产品出海、产业协作的发展,与这座未来之城同频共振,开启“AI+机器人”产业发展新征程。

新工作适应速度直接影响职业起步质量,有人快速成为骨干,有人长期徘徊边缘,核心在于是否掌握系统的适应方法。本文提供覆盖“前期准备-中期融入-后期深耕”的职场破冰方法论:入职前72小时,从岗位、团队、业务三个维度做好信息预习,提前掌握核心信息;入职1-4周,遵循“三做三避”原则,以核心任务为锚点,通过精准执行、主动补位、及时反馈建立可靠形象,同时高效适配沟通习惯;入职1-3月,聚焦能力补位与价值输出,识别岗位需求差距并快速学习,主动创造价值实现从新人到团队贡献者的转变,助力职场人快速打破壁垒,在新岗位站稳脚跟。

本手册为Sketch 2中文用户手册,适用于新手与熟练用户,会持续完善,用户可通过邮箱mail@bohemiancoding.com反馈问题。手册介绍了Sketch是一款面向全设计师的矢量绘图应用,主打网页、图标及界面设计,兼具矢量编辑与基础位图工具,易上手且功能强大,可替代Adobe Photoshop,专为图标与界面设计打造,有出色UI、多填充模式、优质文本功能、无限画布及切片工具等。此外还讲解了其简洁界面,包括顶端可自定义的工具栏、可管理图层与页面的图层列表、能调整参数的检查器,以及无限尺寸的画布,也提及了图形、矢量等图层类型。

2025年10月13日,中国AI硬件公司未来智能宣布完成亿元级A轮融资,由蚂蚁集团领投、启明创投超额跟投,这是其年内第三次获得融资。未来智能自2021年布局AI办公耳机赛道,产品已从“记录工具”演进至“主动创作与交互”的个人智能办公助理,且已于2024年实现盈利。本轮融资将用于丰富AI办公硬件产品矩阵、建设推广海外自主品牌viaim、加大AI Agent等前沿技术探索投入,目前其海外品牌在北美、亚太市场增长迅速。

为您推荐的相关资源