HarmonyOS NEXT 实战之元服务:静态案例效果---查看国际航班服务
背景:
前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考
先上本期效果图 ,里面图片自行替换

效果图1完整代码案例如下:
- Index代码
import { authentication } from '@kit.AccountKit';
import { BusinessError } from '@kit.BasicServicesKit';
import { hilog } from '@kit.PerformanceAnalysisKit';
import { AddressExchangeViewComponent } from './AddressExchangeViewComponent';export const DATA_CONFIG: Record<string, number> = {'NUMBER_LEN': 7,'DURATION_TIME': 200,'MILLENNIAL_LEN': 3
}export const STYLE_CONFIG: Record<string, number> = {'ITEM_GUTTER': 12,'ITEM_HEIGHT': 26,'TEXT_MARGIN': 2,'PADDING_TOP': 32
}
@Entry
@Component
struct Index {build() {Column({ space: STYLE_CONFIG.ITEM_GUTTER }) {Text($r('app.string.EntryAbility_label')).fontColor(Color.White).fontSize($r('sys.float.ohos_id_text_size_headline8')).width($r('app.string.digital_scroll_animation_max_size')).textAlign(TextAlign.Start).margin({left:30})AddressExchangeViewComponent()}.padding({top: STYLE_CONFIG.PADDING_TOP}).margin({ top: 60 }).width($r('app.string.digital_scroll_animation_max_size')).height($r('app.string.digital_scroll_animation_max_size')).linearGradient({colors: [[$r('app.color.digital_scroll_animation_background_color'), 0.0],[$r('sys.color.ohos_id_color_background'), 0.3]]})}aboutToAppear() {hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');this.loginWithHuaweiID();}/*** Sample code for using HUAWEI ID to log in to atomic service.* According to the Atomic Service Review Guide, when a atomic service has an account system,* the option to log in with a HUAWEI ID must be provided.* The following presets the atomic service to use the HUAWEI ID silent login function.* To enable the atomic service to log in successfully using the HUAWEI ID, please refer* to the HarmonyOS HUAWEI ID Access Guide to configure the client ID and fingerprint certificate.*/private loginWithHuaweiID() {// Create a login request and set parameterslet loginRequest = new authentication.HuaweiIDProvider().createLoginWithHuaweiIDRequest();// Whether to forcibly launch the HUAWEI ID login page when the user is not logged in with the HUAWEI IDloginRequest.forceLogin = false;// Execute login requestlet controller = new authentication.AuthenticationController();controller.executeRequest(loginRequest).then((data) => {let loginWithHuaweiIDResponse = data as authentication.LoginWithHuaweiIDResponse;let authCode = loginWithHuaweiIDResponse.data?.authorizationCode;// Send authCode to the backend in exchange for unionID, session}).catch((error: BusinessError) => {hilog.error(0x0000, 'testTag', 'error: %{public}s', JSON.stringify(error));if (error.code == authentication.AuthenticationErrorCode.ACCOUNT_NOT_LOGGED_IN) {// HUAWEI ID is not logged in, it is recommended to jump to the login guide page}});}
}
- AddressExchangeViewComponent代码
import curves from '@ohos.curves';
import { promptAction } from '@kit.ArkUI';@Preview
@ComponentV2
export struct AddressExchangeViewComponent {@Local rotateAngle: number = 0;@Local translateX: number = 0;@Local swap: boolean = false;private JWidth: number = 300;build() {Column({ space: 15 }) {Row() {Text($r('app.string.address_exchange_address_left')).translate({ x: this.translateX }).width("40%").textAlign(this.swap ? TextAlign.End : TextAlign.Start).onClick(() => {promptAction.showToast({message: '北京',});})Stack() {Image($r('app.media.address_exchange_airplane')).size({height: 16,width: 16})Image($r('app.media.address_exchange_recycle')).size({height: 38,width: 38}).rotate({ angle: this.rotateAngle }).animation({curve: Curve.EaseOut,playMode: PlayMode.Normal,})}.width("20%").onClick(() => {this.swap = !this.swapanimateTo({ curve: curves.springMotion() }, () => {if (this.swap) {this.translateX = this.JWidth * 0.5;} else {this.translateX = 0}})this.rotateAngle += 180;})Text('深圳').translate({ x: -this.translateX }).width("40%").textAlign(this.swap ? TextAlign.Start : TextAlign.End).onClick(() => {promptAction.showToast({message: '点了'});})}.width(this.JWidth).padding(8).height(60)Row({ space: 16 }) {Text(this.getDate()).fontSize($r('app.string.ohos_id_text_size_headline')).fontWeight(FontWeight.Medium).height(30)Text($r('app.string.address_exchange_week')).height(30)}.width(this.JWidth).onClick(() => {promptAction.showToast({message:'点了',});})Button($r('app.string.address_exchange_search_ticket')).fontColor(Color.White).height(40).backgroundColor('#00B780').width(this.JWidth).onClick(() => {promptAction.showToast({message: '今日机器出现故障,请找工作室人员解决',});})Row({ space: 10 }) {Row() {Row() {Text('带儿童/婴儿').fontSize(13).fontColor('#222222')Toggle({ type: ToggleType.Checkbox, isOn: true })}Row() {Text('学生票').fontSize(13).fontColor('#222222')Toggle({ type: ToggleType.Checkbox, isOn: false })}}}.width('100%').justifyContent(FlexAlign.SpaceBetween)Row() {Text('VIP专享服务').fontSize(18).fontColor(Color.Black)Text('查看更多>').fontSize(15).fontColor(Color.Black)}.justifyContent(FlexAlign.SpaceBetween).width('100%').padding(10).onClick(() => {})Column() {Row() {this.msgRelated($r('app.media.j1'), '天天领劵', () => {})this.msgRelated($r('app.media.j2'), '低价监控', () => {})this.msgRelated($r('app.media.j3'), '空铁联订', () => {})}.width('95%').height(80).margin({bottom: 4,left: 12,right: 12}).backgroundColor(Color.White).justifyContent(FlexAlign.SpaceAround)}.width('95%').height(80).margin({bottom: 4,left: 12,right: 12}).borderRadius(10).borderWidth(1).borderColor('#AEEA00').backgroundColor(Color.White).justifyContent(FlexAlign.SpaceAround)Row() {Text('天天享折扣').fontSize(18).fontColor(Color.Black)Text('查看更多>').fontSize(15).fontColor(Color.Black)}.justifyContent(FlexAlign.SpaceBetween).width('100%').padding(10).onClick(() => {})Row({ space: 20 }) {Column({ space: 10 }) {Text('上海 -> 美国').fontWeight(FontWeight.Bold).fontSize(13).fontColor('#5A5A5A')Row() {Text('12月3日 | 周一').fontSize(12).fontColor('#CAC8C9')Text('¥1600') {Span('折扣价 ').fontColor('#222222').fontSize(15)Span('¥1600').fontColor(Color.Red).fontSize(15).fontWeight(FontWeight.Regular)}.fontSize(15).fontColor(Color.Red).fontWeight(FontWeight.Bold).margin({ left: 8 })}.width('100%').justifyContent(FlexAlign.SpaceBetween)Text() {Span('原价 ').fontColor('#222222').fontSize(15)Span('¥2000').fontColor(Color.Red).fontSize(15).fontStyle(FontStyle.Italic)}.fontWeight(FontWeight.Bold).margin({ left: 8 })}.width('100%').borderRadius(18).backgroundColor('#F5F9F8').padding(8).borderWidth(2).borderColor('#00B780').alignItems(HorizontalAlign.Start)}}.width($r('app.string.address_exchange_content_size')).height(178).margin($r('app.string.ohos_id_card_margin_start'))}//消息相关@BuildermsgRelated(src: Resource, title: string, onClick?: () => void) {Column() {Image(src).width(24)Text(title).fontSize(11).fontColor('#222222').margin({ top: 8 })}.onClick(() => {onClick?.()})}private getDate() {const now = new Date();const year = now.getFullYear();const month = now.getMonth() + 1; // 注意:月份是从0开始计数的const day = now.getDate();return `${year} 年 ${month} 月 ${day} 日`}
}
最近文章>>>>>>>>>>>
HarmonyOS NEXT实战:元服务与应用 APP 发布应用市场的详细步骤与流程
若本文对您稍有帮助,诚望您不吝点赞,多谢。
有兴趣的同学可以点击查看源码
- gitee:https://gitee.com/jiaojiaoone/explore-harmony-next/tree/case%2Fwanandroid/
- github:https://github.com/JasonYinH/ExploreHarmonyNext.git
相关文章:
HarmonyOS NEXT 实战之元服务:静态案例效果---查看国际航班服务
背景: 前几篇学习了元服务,后面几期就让我们开发简单的元服务吧,里面丰富的内容大家自己加,本期案例 仅供参考 先上本期效果图 ,里面图片自行替换 效果图1完整代码案例如下: Index代码 import { authen…...
PetaLinux 内核输出信息的获取方式
串口终端: 默认输出方式。 曾尝试过将串口终端的输出重映射到伪终端,失败了。 伪终端: dmesg命令 dmesg是Linux系统重查看内核日志的使用工具,允许查看系统内核的输出消息,包括引导信息,硬件检测,设备驱动和系统错…...
Android使用辅助服务AccessibilityService实现自动化任务
Android 辅助服务(AccessibilityService)旨在帮助具有视觉、身体或年龄相关限制的用户更轻松地使用 Android 设备和应用。通过辅助服务,可以将一些人工操作自动化,从而解放用户的双手。 因此我们可以使用它来实现一些自动化任务&a…...
工业大数据分析算法实战-day15
文章目录 day15特定数据类型的算法工业分析中的数据预处理工况划分数据缺失时间数据不连续强噪声大惯性系统趋势项消除 day15 今天是第15天,昨日是针对最优化算法、规则推理算法、系统辨识算法进行了阐述,今日主要是针对其他算法中的特定数据类型的算法…...
C语言实现顺序表详解
文章目录 [TOC] 1.前言🙋🏼♂️2.顺序表🧣2.1 顺序表概念🧣2.2 顺序表特点🧣2.2 顺序表作用🧣 3.顺序表基操🧤3.1 结构体初始化🎉3.2 顺序表初始化🎉3.3 顺序表创建&am…...
【ES6复习笔记】对象方法扩展(17)
对象方法扩展 在 JavaScript 中,对象是属性和方法的集合。除了内置的方法,我们还可以通过扩展对象的原型来添加新的方法。本教程将介绍如何使用 Object.is、Object.assign 和 Object.setPrototypeOf 方法来扩展对象。 1. Object.is 判断两个值是否完全…...
【视觉惯性SLAM:相机成像模型】
相机成像模型介绍 相机成像模型是计算机视觉和图像处理中的核心内容,它描述了真实三维世界如何通过相机映射到二维图像平面。相机成像模型通常包括针孔相机的基本成像原理、数学模型,以及在实际应用中如何处理相机的各种畸变现象。 一、针孔相机成像原…...
学习笔记(C#基础书籍)-- C#基础篇
(12.24) C#介绍:《第一章》 特点:语法简洁,面向对象,支持绝大部分的web标准,强大的安全机制(垃圾回收器),兼容性好(遵循.NET的公共语言规范【CL…...
操作系统(26)数据一致性控制
前言 操作系统数据一致性控制是确保在计算机系统中,数据在不同的操作和处理过程中始终保持正确和完整的一种机制。 一、数据一致性的重要性 在当今数字化的时代,操作系统作为计算机系统的核心,负责管理和协调各种资源,以确保计算机…...
ubuntu24.04使用opencv4
ubuntu24.04LTS自带opencv4.5代码实例 //opencv_example.cpp #include <opencv2/opencv.hpp> #include <iostream>int main() {// 读取图像cv::Mat img cv::imread("image.jpg", cv::IMREAD_COLOR);if (img.empty()) {std::cerr << "无法读…...
【项目构建】Gradle入门
本文适用: 不知道什么是项目构建,可以了解下Ant,Maven,Gradle的区别。知道什么是项目构建,了解Ant,Maven,可以看到Gradle是怎么做的。知道什么是项目构建,了解Ant,Maven&…...
Electron -- Electron应用主要核心(二)
Electron 应用主要由以下几个核心组成部分构成: 主进程(Main Process): Electron 应用的入口点是主进程,通常是 main.js 文件。它负责管理应用的生命周期,包括创建窗口、处理系统事件和应用更新等。主进程可…...
【前端开发】HTML+CSS+JavaScript前端三剑客的基础知识体系了解
前言 🌟🌟本期讲解关于HTMLCSSJavaScript的基础知识,小编带领大家简单过一遍~~~ 🌈感兴趣的小伙伴看一看小编主页:GGBondlctrl-CSDN博客 🔥 你的点赞就是小编不断更新的最大动力 …...
git命令恢复/还原某个文件、删除远程仓库中的文件
有时刚创建的远程仓库,可能无意中把一些没用的文件上传到仓库,本文介绍一下怎么删除这些文件。 一、git命令恢复某个文件 第一步:拉取最新代码 git pull 第二步: 查看git 修改的文件状态 git status 第三步:查看…...
二十一、Ingress 进阶实践
架构参考 使用hostnetwork,推荐的方式,使用单独的物理服务器,不部署业务pod的主机。 一、Ingress Nginx Controller 安装 采用helm的安装方式,进行部署。 官网地址: https://kubernetes.github.io/ingress-nginx/deploy/ github地址: https://github.com/kubernetes/in…...
ES学习Promise对象(九)
这里写目录标题 一、概念二、示例基本使用使用 Promise 对象封装Ajaxthen() 方法catch() 方法 一、概念 简单说就是一个容器,里面保存着某个未来才会结束的事件(通常是一个异步操作)的结果。Promise 是一个对象,Promise 提供统一…...
寻找适合小户型的开源知识库open source knowledge base之路
寻找一个开源的知识库,为了把以前花很多时间收集的信息或是项目/课程资料放到一个容易归类和管理的私有自主系统中,以便更容易查阅,花更少时间收集、对比版本及分享等一系列管理工作,同时确保在需要时可以相对快速找到有用的资料&…...
Linux高级--2.6 网络面试问题
tcp 与 udp的区别 1.tcp 是基于连接的 UDP是基于数据包 2.处理并发的方式不通 a.tcp用epoll进行监听的 b. udp是模拟tcp的连接过程,服务端开放一个IP端口,收到连接后,服务端用另一个IP和端口发包给客户端。 3.tcp根据协议MTU黏包及…...
在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc
在 CentOS 7 上安装 Node.js 20 并升级 GCC、make 和 glibc 📖 前言 在 CentOS 7 上使用 NVM 安装 Node.js 后,可能会遇到如下问题: node: /lib64/libm.so.6: version GLIBC_2.27’ not found (required by node) node: /lib64/libc.so.6:…...
音视频入门基础:MPEG2-TS专题(20)——ES流简介
《T-REC-H.222.0-202106-S!!PDF-E.pdf》第27页对ES进行了定义。ES流是PES packets(PES包)中编码的视频、编码的音频或其他编码的比特流。一个ES流(elementary stream)在具有且只有一个stream_id的PES packets序列中携带࿱…...
3大核心功能提升50%英雄联盟操作效率的开源工具
3大核心功能提升50%英雄联盟操作效率的开源工具 【免费下载链接】League-Toolkit An all-in-one toolkit for LeagueClient. Gathering power 🚀. 项目地址: https://gitcode.com/gh_mirrors/le/League-Toolkit 你是否曾在排位赛中因手速慢错过最佳英雄选择时…...
构建一个抗揍的 Go TCP 聊天服务:异常兜底与防御性编程实践
构建一个抗揍的 Go TCP 聊天服务:异常兜底与防御性编程实践 在用 Go 实现一个简单的 TCP 聊天室时,实现“上线、下线、广播、私聊”等功能并不难。但如果要把它放到公网,面对真实网络环境中的网络抖动、恶意攻击(如超长消息洪水、…...
2025届最火的六大降重复率助手推荐
Ai论文网站排名(开题报告、文献综述、降aigc率、降重综合对比) TOP1. 千笔AI TOP2. aipasspaper TOP3. 清北论文 TOP4. 豆包 TOP5. kimi TOP6. deepseek 能降低AIGC检测率的关键之处在于模拟人类写作所具备的自然性以及逻辑跳跃。其一,…...
【花雕动手做】ESP32-S3 + MimiClaw 实战:通过飞书自然语言指令控制板载 WS2812 彩灯
【花雕动手做】嵌入式 AI Agent 实战:MimiClaw ESP32-S3 接入飞书,远程控制板载 RGB 全彩灯效 ——从源码修改到飞书指令,手把手打造一个能“听懂颜色话”的嵌入式 AI 智能体 一、引言:当“养龙虾”热潮遇到嵌入式 AI 2026 年开春…...
开源激活利器:KMS_VL_ALL_AIO全场景应用指南
开源激活利器:KMS_VL_ALL_AIO全场景应用指南 【免费下载链接】KMS_VL_ALL_AIO Smart Activation Script 项目地址: https://gitcode.com/gh_mirrors/km/KMS_VL_ALL_AIO 问题:激活困境与技术痛点 个人用户的激活难题 当Windows系统突然弹出激活提…...
智能座舱音频革命:如何用AVB交换机+TSN协议打造零延迟车载音响系统?
智能座舱音频革命:AVB交换机与TSN协议构建毫秒级同步音响系统 当你在驾驶舱内播放一首交响乐时,前排低音炮与后排高音单元的时差超过10毫秒,人耳就能感知声场撕裂——这种体验在传统车载音频架构中几乎无法避免。随着智能座舱向"第三生活…...
颠覆式配置革命:OpCore-Simplify让黑苹果爱好者效率提升83%的智能工具
颠覆式配置革命:OpCore-Simplify让黑苹果爱好者效率提升83%的智能工具 【免费下载链接】OpCore-Simplify A tool designed to simplify the creation of OpenCore EFI 项目地址: https://gitcode.com/GitHub_Trending/op/OpCore-Simplify 当你在凌晨三点对着…...
面试:synchronized用过吗,其原理是什么
一、基础回答 1. 用过吗?用来做什么? 用过。synchronized 是 Java 内置的悲观锁关键字,用来解决多线程并发安全问题,保证同一时刻只有一个线程执行被锁定的代码,避免线程安全问题(如原子性、可见性、有序性…...
猫抓浏览器扩展:从零开始的网页资源嗅探完全指南
猫抓浏览器扩展:从零开始的网页资源嗅探完全指南 【免费下载链接】cat-catch 猫抓 浏览器资源嗅探扩展 / cat-catch Browser Resource Sniffing Extension 项目地址: https://gitcode.com/GitHub_Trending/ca/cat-catch 还在为网页上的精彩视频无法保存而烦恼…...
httpspider全局抓包,直接抓取下载模拟器 手机 平板 电视中的数据(视频 音乐 直播
httpspider可以抓取所有经过电脑的所有http和https数据,比如 抓取安卓模拟器,其他电脑软件,而且还可以直接抓取手机中的流量。先看效果图抓模拟器:抓手机:分享了「httpspider.exe」 链接:https://pan.quark…...
