探秘鸿蒙 HarmonyOS NEXT:实战用 CodeGenie 构建鸿蒙应用页面
在开发鸿蒙应用时,你是否也曾为一个页面的布局反复调整?是否还在为查 API、写模板代码而浪费大量时间?今天带大家实战体验一下鸿蒙官方的 AI 编程助手——CodeGenie(代码精灵) ,如何从 0 到 1 快速构建一个完整页面!帮助入门开发者快速上手,了解如何通过 AI 辅助完成页面开发的整个流程。
本文将带你用自然语言和 CodeGenie 聊聊天,就能自动生成一个完整的新闻列表页面,体验一下CodeGenie的高效性!
目标
我们打算做一个新闻类 App 的首页页面,包含以下内容:
- 一个顶部标题栏
- 一个搜索框,支持输入关键词
- 一个可滑动的新闻卡片列表(带标题、图片、描述)
- 下拉刷新功能
这个页面是大部分内容类应用的常见模板,CodeGenie 可以轻松帮我们构建出来。
环境准备
在开始之前,请确保你已经准备好以下开发环境:
项目 | 状态 |
---|---|
DevEco Studio | 已安装(建议使用 4.0+ 版本) |
CodeGenie 插件 | 已启用(可在设置中打开) |
项目类型 | ArkTS 应用项目 |
创建一个新的项目(例如叫 NewsApp
),并进入主页面代码文件(例如 NewsListPage.ets
)。
第一步:打开 CodeGenie 聊天界面,输入需求描述
打开 DevEco Studio,点击工具栏右上角的 CodeGenie 图标,进入聊天界面,输入我们的页面需求:
请帮我用 ArkTS 创建一个完整的新闻列表页面demo,包含标题栏、搜索框、可滑动的新闻卡片列表(含标题、图片、描述),并支持下拉刷新。
几秒钟后,CodeGenie 就会自动生成一个完整的页面代码。如果没有达到预期效果,那么可能是描述的不优雅,我们可以换个问法,需求描述很重要!
第二步:查看并理解生成的代码
CodeGenie 给出的页面代码结构清晰,具备完整的 UI 和逻辑,例如:
@Entry
@Component
struct NewsListPage {@State newsList: Array<NewsItem> = [{ title: '新闻标题1', image: $r('app.media.news1'), description: '新闻描述1' },{ title: '新闻标题2', image: $r('app.media.news2'), description: '新闻描述2' },{ title: '新闻标题3', image: $r('app.media.news3'), description: '新闻描述3' },// 更多新闻...]build() {Column() {// 标题栏NavigationBar() {Text('新闻列表').fontSize(20).fontWeight(FontWeight.Bold)}// 搜索框SearchBar()// 可滑动的新闻卡片列表List() {ForEach(this.newsList, (newsItem: NewsItem) => {NewsCard(newsItem)})}.onScrollIndex((start: number) => {console.info(`开始索引: ${start}`)}).listDirection(Axis.Vertical).edgeEffect(EdgeEffect.Spring).scrollBar(BarState.Off).friction(0.6).onScroll((scrollOffset: number) => {console.info(`滚动偏移量: ${scrollOffset}`)}).onScrollEdge((edge: Edge) => {console.info(`滚动到边缘: ${edge}`)}).onScrollStop(() => {console.info('滚动停止')}).enableScrollInteraction(true)}.width('100%').height('100%').backgroundColor(Color.White)}
}interface NewsItem {title: stringimage: Resourcedescription: string
}@Component
struct NavigationBar {build() {Row() {Text('新闻列表').fontSize(20).fontWeight(FontWeight.Bold)}.height(50).backgroundColor(Color.Blue).justifyContent(FlexAlign.Center).alignItems(VerticalAlign.Center)}
}@Component
struct SearchBar {build() {Row() {Image($r('app.media.search')).width(20).height(20).margin({ left: 10 })TextInput().placeholder('搜索新闻...').width('80%').height(40).backgroundColor(Color.White).fontSize(16).fontColor(Color.Black).borderRadius(20).margin({ left: 10 })}.height(40).backgroundColor(Color.White).justifyContent(FlexAlign.Center).alignItems(VerticalAlign.Center).padding(10)}
}@Component
struct NewsCard {@Prop newsItem: NewsItembuild() {Column() {Image(this.newsItem.image).width('100%').height(200).objectFit(ImageFit.Cover)Text(this.newsItem.title).fontSize(18).fontWeight(FontWeight.Bold).margin({ top: 10 })Text(this.newsItem.description).fontSize(16).margin({ top: 5 })}.width('100%').height('100%').backgroundColor(Color.White).padding(10).borderRadius(10).margin({ bottom: 10 })}
}
以下是对代码的解释:
在这个示例中:
- 使用@Entry和@Component装饰器定义了一个名为NewsListPage的组件,作为页面的入口。
- 使用@State装饰器定义了一个newsList状态,用于存储新闻列表数据。
- 使用Column布局组件来组织页面内容,包括标题栏、搜索框和新闻卡片列表。
- 使用NavigationBar组件来显示页面的标题。
- 使用SearchBar组件来显示搜索框。
- 使用List组件来创建一个可滑动的新闻卡片列表,并使用ForEach循环渲染每个新闻卡片。
- 使用NewsCard组件来显示每个新闻卡片的内容,包括标题、图片和描述。
- 使用各种属性和事件处理函数来控制组件的样式和行为。
CodeGenie 回答的还是很完善的,非常的棒!
第三步:调整图片资源或组件API代码
CodeGenie 帮我们生成的代码,还是有一些小瑕疵的,需要我们手动去调整,例如一些图片资源或者组件的API方法不支持等等
生成的代码中默认使用了本地图片 app.media.news1
。你可以按如下方式替换为真实的网络图片或资源文件:
✅ 方法一:放入本地资源目录
将图片放到 resources/base/media/
目录中,并确保路径正确,例如:
image: '/resources/base/media/news1.png'
✅ 方法二:使用网络图片链接
image: 'https://example.com/news-image1.jpg'
第四步:运行并预览页面
在 DevEco Studio 中点击“预览”或运行到模拟器,页面应当呈现如下结构:
- 顶部:“新闻列表”标题
- 中部:可输入的搜索框
- 下方:可滚动的新闻卡片列表,每项展示图片、标题与描述
- 下拉操作:触发刷新逻辑
恭喜你,短短几分钟就完成了一个页面的搭建!
拓展功能建议
有了基础页面,你可以继续和 CodeGenie 聊天,添加新功能。例如:
想法 | 示例指令 |
---|---|
增加分页加载 | “为新闻列表添加分页加载逻辑,滑到底部时加载更多” |
优化样式 | “请让卡片增加圆角和阴影,更加卡片化” |
跳转到详情页 | “点击新闻项跳转到详情页,传递新闻数据” |
网络请求替代模拟数据 | “把 newsList 替换为从远程接口请求的新闻列表” |
CodeGenie 会像开发搭档一样,持续帮你完善页面!
总结:AI + 开发 = 高效创作
通过这次实战我们可以看到,CodeGenie 不仅可以理解自然语言,还能真正参与到项目搭建的每一步:
- 快速生成结构清晰、功能完整的页面
- 理解鸿蒙 ArkTS 的开发模式与组件体系
- 帮助开发者省去大量重复劳动,专注业务逻辑
- 对初学者友好,对资深开发者更是降本增效
如果你还没有试过 CodeGenie,现在就打开 DevEco Studio,动动嘴皮子或者敲几行字,就能把一个页面做出来!
相关文章:

探秘鸿蒙 HarmonyOS NEXT:实战用 CodeGenie 构建鸿蒙应用页面
在开发鸿蒙应用时,你是否也曾为一个页面的布局反复调整?是否还在为查 API、写模板代码而浪费大量时间?今天带大家实战体验一下鸿蒙官方的 AI 编程助手——CodeGenie(代码精灵) ,如何从 0 到 1 快速构建一个…...

art-pi2 上手记录(二)
功能比较庞杂,写得不好,抛砖引玉 预备知识 stm32 默认从主闪存0x08000000启动 art-pi2的psram 映射0x90000000 art-pi2的8线ospi flash 映射0x70000000 stm32h7比较灵活,通过修改选项字节,可以实现从 0x0000 0000 到 0x3FFF 0…...

数据库SQLite基础
SQLite的存储结构 --->B树 大型数据库 :Oracle 中型数据库 :Server是微软开发的数据库产品,主要支持windows平台 小型数据库 : MySQL是一个小型关系型数据库管理系统。开放源码 (嵌入式不需要存储太多数据) 一、SQLite基础 SQLite的源代码…...

1.3 古典概型和几何概型
文章目录 古典概型模型(等可能模型)几何概型 古典概型模型(等可能模型) 两个条件: 1) 有限个样本点 2) 等可能性 例题: 设有n个人,每个人都等可能地被分配到N个房间中的任一间(n≤N), 求下列事件的概率: (1)某指定的n间房…...

html-pre标签
我们都知道在常见标签里面的文字的格式是不会显示的,比如你打了多个空格,但却不会显示,而pre标签会显示。 主要特点: 保留空格和换行:在 <pre> 标签内,HTML 会保留所有的空格、换行符和制表符等格式…...

【WPF】WPF 项目实战:用ObservableCollection构建一个可增删、排序的管理界面(含源码)
💡WPF 项目实战:构建一个可增删、排序的光源类型管理界面(含源码) 在实际的图像处理项目中,我们经常需要对“光源类型”进行筛选或管理。今天我们来一步步构建一个实用的 WPF 界面,实现以下功能࿱…...

MCU_IO驱动LED
注意事项: 1、亮度要求较高的情况下,不能由IO直接驱动LED MCU_IO引脚输出的电压和电流较弱,如果对光的亮度有要求的话,需要使用三极管来驱动。 MCU_IO的电压一般为3.3V或者5V,输出电流一般10mA-25mA。 2、不同颜色…...

上门预约行业技术方案全解析:小程序、App还是H5?如何选择?
上门按摩行业这几年确实火,但千万别以为随便买个系统、招几个技师就能赚钱。作为一家深耕10年软件开发的公司,我们做了四五年上门按摩系统,见过太多人头脑一热冲进来,结果血本无归。 如果你真的想做上门按摩,先想清楚这…...
Java 集合面试题 PDF 及常见考点解析与备考指南
为了帮助你更好地学习Java集合相关知识,我将围绕Java集合面试题展开,介绍常见的技术方案及应用实例。这些内容涵盖了集合框架的基本概念、常见集合类的特点与使用场景,以及在实际开发中可能遇到的问题及解决方案。 Java集合面试题࿱…...

Java 大视界 -- 基于 Java 的大数据分布式计算在蛋白质组学数据分析中的加速与优化(255)
💖亲爱的朋友们,热烈欢迎来到 青云交的博客!能与诸位在此相逢,我倍感荣幸。在这飞速更迭的时代,我们都渴望一方心灵净土,而 我的博客 正是这样温暖的所在。这里为你呈上趣味与实用兼具的知识,也…...
如何通过外网访问内网?哪个方案比较好用?跨网远程连接网络知识早知道
广域网(英语:Wide Area Network,缩写为 WAN),又称外网、公网。是连接不同地区局域网或城域网计算机通信的远程网。 局域网(LAN),全称为Local Area Network,指在较小的地理区域内,通…...

Vue.js教学第十八章:Vue 与后端交互(二):Axios 拦截器与高级应用
Vue 与后端交互(二):Axios 拦截器与高级应用 在上一篇文章中,我们学习了 Axios 的基本用法,包括如何发送不同类型的 HTTP 请求以及基本的配置选项。本文将深入剖析 Axios 的拦截器功能,探讨请求拦截器和响应拦截器的作用、配置方法和应用场景,通过实例展示如何利用拦截…...
C#中datagridview单元格value为{}大括号
使用数据库查询结果绑定datagridview数据源后,在对单元格的值进行处理的过程中出现报错,包括直接多cell.value.ToString()也报错,调试发现该单元格Value为“{}”,与null或""对比判断都没有结果,可使用Conver…...
46、web实验-遍历数据与页面bug修改
46、web实验-遍历数据与页面bug修改 在Web开发中,遍历数据和修改页面bug是常见的任务。以下是关于这两个主题的讲解: ### 一、遍历数据 **目的**:在页面上动态展示数据,例如用户列表、商品信息等。 **常用方法**: ####…...
华为OD机试_2025 B卷_数组去重和排序(Python,100分)(附详细解题思路)
题目描述 给定一个乱序的数组,删除所有的重复元素,使得每个元素只出现一次,并且按照出现的次数从高到低进行排序,相同出现次数按照第一次出现顺序进行先后排序。 输入描述 一个数组 输出描述 去重排序后的数组 用例 输入1,3,…...

云计算 Linux Rocky day03(which、快捷键、mount、家目录、ls、alias、mkdir、rm、mv、cp、grep)
云计算 Linux Rocky day03(which、快捷键、mount、家目录、ls、alias、mkdir、rm、mv、cp、grep) 目录 云计算 Linux Rocky day03(which、快捷键、mount、家目录、ls、alias、mkdir、rm、mv、cp、grep)1.which找到命令所对应的程序…...
gh hugging face使用
install sudo dpkg -i gh_2.74.0_linux_amd64.deb gh auth login gh auth login ? Where do you use GitHub? GitHub.com ? What is your preferred protocol for Git operations on this host? HTTPS ? Authenticate Git with your GitHub credentials? Yes ? How wo…...
SQL Server全局搜索:在整个数据库中查找特定值的高效方法
SQL Server全局搜索:在整个数据库中查找特定值的高效方法 一、需求背景:为什么需要数据库全局搜索? 在数据库管理和开发过程中,我们经常会遇到这样的场景: 只记得某个数据值,但忘记了它所在的表或列需要…...

JVM 内存溢出 详解
内存溢出 内存溢出指的是内存中某一块区域的使用量超过了允许使用的最大值,从而使用内存时因空间不足而失败,虚拟机一般会抛出指定的错误。 在Java虚拟机中,只有程序计数器不会出现内存溢出的情况,因为每个线程的程序计数器只保…...
Qt 5.12 上读取 .xlsx 文件(Windows 平台)
推荐最优方案:使用 QXlsx 库 QXlsx 是一个基于 Qt 的开源库,专门用于读写 .xlsx 文件,适用于 Qt 5.12,且无需依赖 Microsoft Excel 或 COM 对象。以下是其优势与实现步骤: 优势 跨平台:QXlsx 不依赖 Mic…...

虚拟机CentOS 7 网络连接显示“以太网(ens33,被拔出)“、有线已拔出、CentOS7不显示网络图标
文章目录 一、问题描述二、解决方法1、查看网络连接方式2、开启相关服务3、确认虚拟机网络连接 一、问题描述 问题描述:在VmWare中安装CentOS7, 启动后界面不显示网络的图标。 在GONE桌面—》设置中找到网络设置,发现显示线缆已拔出。 二、解决方法 …...

Tailwind CSS 实战:基于 Kooboo 构建 AI 对话框页面(六):图片上传交互功能
在 《Tailwind CSS 实战:基于 Kooboo 构建 AI 对话框页面(五)》 中,完成了语音交互功能的优化。本文作为该系列教程的第六篇,将聚焦于图片上传功能的开发。通过集成图片上传与预览能力,我们将进一步完善 AI…...

传统的将自然语言转化为嵌入向量的核心机制是:,将离散的语言符号转化为连续的语义向量,其核心依赖“上下文决定语义”的假设和神经网络的特征提取能力。
传统的将自然语言转化为嵌入向量的核心机制是:,将离散的语言符号转化为连续的语义向量,其核心依赖“上下文决定语义”的假设和神经网络的特征提取能力。 传统的将自然语言转化为嵌入向量(Word Embedding)的核心机制是分布式语义假设(Distributional Semantics Hypothesis…...
【前端】每日一道面试题6:解释Promise.any和Promise.allSettled的使用场景及区别。
Promise.any() 和 Promise.allSettled() 是 JavaScript 中用于处理异步操作的两种不同策略的 Promise 组合器,它们的核心区别在于逻辑目标与结果处理方式: 1. Promise.any() 使用场景: 需要获取 首个成功结果(类似竞速成功优先&…...
wordpress+woocommerce电商平台搭建方案的优势分析
以下是WordPress WooCommerce电商平台搭建方案的优势分析: 技术架构与功能扩展优势 强大的插件生态系统:WordPress拥有超过58000个插件,WooCommerce作为其中最受欢迎的电商插件,提供了丰富的功能扩展选项,如支持超过…...

玄机-日志分析-IIS日志分析
1.phpstudy-2018站点日志.(.log文件)所在路径,提供绝对路径 2.系统web日志中状态码为200请求的数量是多少 3.系统web日志中出现了多少种请求方法 4.存在文件上传漏洞的路径是什么(flag{/xxxxx/xxxxx/xxxxxx.xxx} 5.攻击者上传并且利用成功的webshell的文件名是什…...
IDEA:配置 Git 需要完成 Git 路径设置、账号认证以及仓库关联三个主要步骤
一、验证 Git 是否已安装 检查 Git 版本(Windows/Linux/Mac): 打开终端 / 命令提示符,输入: git --version若未安装,下载并安装 Git 二、在 IDEA 中配置 Git 路径 打开设置: Windows/Linux&a…...
PHP 复制商品扩展实操:轻松切换一号通、99api ,实现商品复制功能
目前已有一号通、99api复制商品扩展 复制商品扩展入口 namespace crmeb\services\copyproduct;use crmeb\basic\BaseManager; use crmeb\services\AccessTokenServeService; use think\facade\Config; use think\Container;/*** Class Product* package crmeb\services\copyp…...

【办公类-104-01】20250606通义万相50分一天用完,通义万相2.1专业版测试
背景需求: 昨天打开通义万相,发现分数降低到3位数,原来时1500.仔细看,原来每天的50分,只有1天有效期了。 用掉试试,用的是之前的30天积分,还是今天的1天积分 纯白色背景,卡通简笔画…...
Prompt Engineering Notes
TOC LLM output configurationOutput length LLM output configuration Output length 仅仅起到截断作用,不会让模型的输出更简洁。...