手把手教你用 Ark-TS UI 做一个会 “动” 的计数器:从代码到原理全解析

2025-03-22 16:36:34
162次阅读
0个评论
最后修改时间:2025-04-16 12:46:10

今天咱们用鸿蒙 5 的 Ark-TS UI 做一个简单又有趣的计数器应用。点击按钮数字就会增加,而且界面还能自动更新。通过这个案例,你能轻松理解 Ark-TS UI 的核心玩法。 一、最终效果长什么样? 打开应用,你会看到一个大按钮,上面写着 “点击加 1”。每次点击按钮,按钮上方的数字就会变大。比如第一次点击变成 “1”,第二次变成 “2”,依此类推。整个过程不需要手动刷新页面,数字会自动变化。你有没有想过,在鸿蒙应用里既能用原生代码写高性能界面,又能直接塞进一个网页?这听起来有点像把汉堡和披萨拼在一起,但 ArkWeb(方舟 Web)真的做到了!今天咱们就聊聊这个神奇的工具,看看它如何让 Web 和原生开发手拉手,轻松打造出超酷的鸿蒙应用。 一、ArkWeb 的秘密武器:Chromium 内核 + 多进程架构 ArkWeb 的第一个厉害之处,在于它的 “心脏”——Chromium 内核。这个内核就是谷歌 Chrome 浏览器用的那个,全世界很多的网页都靠它,所以能又快又稳地加载。不管是复杂的电商页面,还是满是动画的新闻网站,ArkWeb 都能轻松搞定。比如你要在鸿蒙应用里做一个内置浏览器,用 ArkWeb 加载网页的速度和 Chrome 几乎一样快,用户根本感觉不出差别。 另一个黑科技是多进程架构。简单来说,就是把 ArkWeb 分成多个 “小团队” 各自干活。有的团队专门负责渲染网页,有的团队处理 JavaScript 代码,还有的团队盯着安全。这样一来,某个网页崩溃了,其他网页还能正常运行,就像餐厅里某桌客人打翻了饮料,不影响其他桌吃饭一样。这种设计让 ArkWeb 特别稳定,再也不用担心应用因为网页问题突然闪退了。 二、核心能力:从网页控制到原生互动,样样精通 网页加载:想怎么玩就怎么玩 ArkWeb 提供了多种加载网页的方式。比如你可以用声明式加载,像写作文一样描述网页该怎么显示: typescript Web({ src: 'https(有的平台不让放网页链接)😕/example.com(实在抱歉了)/news/123', // 加载鸿蒙官网 controller: this.webController }) .onPageFinished((url) => { console.log(网页加载完毕:${url}); })

这里的onPageFinished就像一个小闹钟,网页加载完就会响,你可以趁机干点别的,比如显示一个 “分享” 按钮。 如果你想提前偷偷加载网页,等用户点击时秒开,ArkWeb 的离屏加载功能就能做到。就像外卖员提前把餐做好,你一下单就能拿到,体验超顺滑。 安全与隐私:贴心的 “网络保安” ArkWeb 自带无痕浏览模式,用户不用担心浏览记录被保存。还有广告拦截功能,看网页时再也不会被烦人的广告打断。最酷的是坚盾守护模式,能自动拦截恶意网站,保护用户的隐私和安全,就像给应用加了一层防盗门。 原生与 Web 互怼:双向沟通无障碍 ArkWeb 最神奇的地方,是能让原生代码和网页互相 “打电话”。比如你在网页里写了一段 JavaScript,想让它调用鸿蒙设备的摄像头,ArkWeb 的 JavaScriptProxy 就能实现。反过来,原生代码也能随时给网页发消息,控制网页的行为。 举个栗子🌰:在一个旅游应用里,原生界面有个 “拍照” 按钮,点击后可以调用 ArkWeb 加载的网页,用网页里的 JavaScript 控制摄像头拍照,拍完还能传回原生界面显示。这种无缝协作,让开发效率直接翻倍! 三、实战案例:用 ArkWeb 做一个会 “呼吸” 的新闻阅读器 假设我们要做一个新闻应用,里面既有原生的推荐文章列表,又有 Web 加载的详细新闻页面。用 ArkWeb 实现起来超简单: 在原生界面嵌入 Web 新闻页 typescript import { webview } from '@kit.ArkWeb';

@Entry @Component struct NewsApp { private webController: webview.WebviewController = new webview.WebviewController();

build() { Column() { // 原生的推荐文章列表 List() { ForEach(newsList, (news) => { Text(news.title).fontSize(18).margin(10); }) } // ArkWeb加载的新闻详情页 Web({ src: 'https(有的平台不让放网页链接)😕/example.com(实在抱歉了)/news/123', controller: this.webController }) .height('50%') // 让网页占屏幕一半高度 } } }

这样一来,用户既能在原生列表里浏览标题,又能在下方的 Web 区域看详细内容,体验超流畅。 让网页和原生互动起来 如果你想在网页里点击按钮时,让原生界面弹出提示,可以这样做: 在网页的 JavaScript 里写: javascript window.jsProxy.showToast('网页按钮被点击啦!');

在原生代码里设置监听: typescript this.webController.jsProxy.setOrCreateJsApi('showToast', (msg) => { console.log(msg); // 弹出提示 });

这样,网页和原生就像好朋友一样,随时能互相传话。 四、为什么开发者都爱 ArkWeb? 一次开发,多端适配 ArkWeb 加载的网页能自动适应不同设备的屏幕,不管是手机、平板还是智能手表,都能完美显示。你不用为每个设备单独写代码,省时省力。 性能炸裂,流畅到飞起 基于 Chromium 内核和多进程架构,ArkWeb 加载网页的速度飞快,复杂动画也能流畅运行。用户刷网页时就像在滑原生应用一样爽。 生态融合,潜力无限 ArkWeb 让鸿蒙应用能轻松集成 Web 内容和小程序,未来还能和更多鸿蒙设备协同工作。比如在车载系统里,用 ArkWeb 加载的网页可以直接调用汽车的传感器,实现更多智能功能。 五、少尉总结以下下:ArkWeb 让鸿蒙开发如虎添翼 ArkWeb 就像一座桥梁,把 Web 的灵活和原生的强大连接在了一起。不管你是想在应用里嵌入网页,还是开发一个高性能浏览器,甚至让原生和 Web 互相调用,ArkWeb 都能帮你轻松实现。它不仅提升了开发效率,还让应用的功能变得更丰富、更有趣。 如果你正在学鸿蒙开发,ArkWeb 绝对是你必须掌握的神器。赶紧试试吧,说不定下一个让人惊艳的鸿蒙应用,就出自你的代码! 二、完整代码长这样

@Entry @Component struct CounterApp { // 用@State标记一个变量count,它的值变化时界面会自动更新 @State count: number = 0

build() { // Column是一个垂直布局容器,里面的内容会从上到下排列 Column() { // Text组件显示文字,这里显示当前的count值 Text(当前计数:${this.count}) .fontSize(24) // 设置字体大小为24像素 .margin(20) // 给文本周围添加20像素的边距

  // Button组件是一个按钮,点击时触发onClick事件
  Button("点击加1")
    .onClick(() => {
      // 点击按钮时,count的值增加1
      this.count++
    })
    .fontSize(18) // 按钮文字大小18像素
    .padding(15) // 按钮内部的 padding 为15像素
    .backgroundColor('#007DFF') // 按钮背景色为蓝色
    .textColor('#FFFFFF') // 按钮文字颜色为白色
    .cornerRadius(8) // 按钮圆角半径8像素
}
// 设置整个Column布局的宽度为屏幕宽度的100%
.width('100%')
// 设置整个布局的对齐方式为垂直和水平居中
.justifyContent(FlexAlign.Center)
.alignItems(HorizontalAlign.Center)

} }

三、逐行代码拆解,零基础也能看懂 @Entry 和 @Component @Entry 表示这个组件是应用的入口,程序从这里开始运行。 @Component 标记这是一个可复用的组件,里面包含界面和逻辑。 @State count: number = 0 @State 是 Ark-TS UI 的关键装饰器,它告诉系统:“这个变量count的值会影响界面,一旦它变化,界面要自动更新。” 这里初始化count为 0,也就是计数器的初始值。 build() 方法 这个方法定义了组件的界面结构。Ark-TS UI 通过声明式语法描述界面,就像 “画图纸” 一样。 Column() 布局容器 Column是一个垂直布局容器,里面的组件会从上到下排列。就像一个竖着的盒子,把内容依次装进去。 Text 组件显示计数 Text(当前计数:({this.count}):显示一行文字,\){this.count}会实时替换为count 变量的值。 .fontSize(24):设置文字大小为 24 像素。 .margin(20):给文本周围添加 20 像素的空白,让界面看起来不拥挤。 Button 组件实现点击功能 Button("点击加1"):创建一个按钮,显示文字 “点击加 1”。 .onClick(() => { this.count++ }):点击按钮时,执行this.count++,也就是让count的值加 1。 .fontSize(18):按钮文字大小 18 像素。 .padding(15):按钮内部的空白区域为 15 像素,让文字看起来不贴着边缘。 .backgroundColor('#007DFF'):按钮背景色设置为蓝色。 .textColor('#FFFFFF'):按钮文字颜色设置为白色。 .cornerRadius(8):按钮四个角设置为圆角,半径 8 像素,让按钮看起来更圆润。 设置布局的整体样式 .width('100%'):让整个Column布局的宽度占满屏幕。 .justifyContent(FlexAlign.Center) 和 .alignItems(HorizontalAlign.Center):让布局内的内容在垂直和水平方向都居中显示,这样按钮和文本会在屏幕正中间。 四、核心原理:为什么界面会自动更新? Ark-TS UI 的秘密武器就是@State装饰器。当count的值变化时(比如点击按钮让count++),Ark-TS UI 会自动检测到这个变化,并重新渲染界面。你不需要手动操作界面元素,只需要关注数据逻辑,界面会 “自动听话”。

这种数据驱动界面的方式,让开发变得更简单。你只需要关心 “数据怎么变”,而不用操心 “界面怎么改”,Ark-TS UI 会帮你处理好一切。 五、晒为总结以下:从案例学 Ark-TS UI 的精髓 通过这个计数器案例,我们学到了 Ark-TS UI 的三个核心能力:

声明式语法:用简洁的代码描述界面结构,就像画图纸一样直观。 状态管理:@State让数据和界面自动联动,数据变,界面跟着变。 丰富的组件和样式:直接使用Text、Button等组件,通过链式调用快速设置样式,省去了复杂的 CSS 代码。

如果你想尝试鸿蒙 5 开发,Ark-TS UI 绝对是你入门的最佳选择。赶紧动手试试吧,下一个有趣的应用可能就出自你的代码!

收藏00

登录 后评论。没有帐号? 注册 一个。