华为鸿蒙开发笔记
记在前面
官方文档链接
因无法直接使用chatgpt进行编程(悲,2024/10),故记录笔记,方便查阅,基于arkts语言
DevEco
中文
deveco是默认有中文包的,所以在市场里面搜不错,而应该在已安装里面搜索,然后启用就行了
测试
对ts进行单独测试
打开entry/src/test/LocalUnit.test.ets
将需要测试的代码附加再后面,然后就可以运行了,如下面测试代码
const first: string = "Hello World";
console.log(first);
常用组件
大小单位
如下,有两种设置方式
@Entry
@Component
struct Index {build() {Column({ }) {Text().width(360).height(360).backgroundColor(0x0000FF)Text().width('100%').height('50%').backgroundColor(0x00FF00)}}
}
Text
Text('HarmonyOS').fontColor(Color.Blue).fontSize(40).fontStyle(FontStyle.Italic).fontWeight(FontWeight.Bold).textAlign(TextAlign.Center)
使用资源文件
Text($r('app.string.EntryAbility_label'))
Image
资源图片
Image($r("app.media.image2")).objectFit(ImageFit.Cover).backgroundColor(0xCCCCCC).width(100).height(100)
-
Contain:保持宽高比进行缩小或者放大,使得图片完全显示在显示边界内。
-
Cover(默认值):保持宽高比进行缩小或者放大,使得图片两边都大于或等于显示边界。
-
Auto:自适应显示。
-
Fill:不保持宽高比进行放大缩小,使得图片充满显示边界。
-
ScaleDown:保持宽高比显示,图片缩小或者保持不变。
-
None:保持原有尺寸显示。
网络图片
Image('https://www.example.com/xxx.png')
为了成功加载网络图片,您需要在module.json5文件中申明网络访问权限。
{"module" : {"requestPermissions":[{"name": "ohos.permission.INTERNET"}]}
}
TextInput
@Entry
@Component
struct Test {@State text: string = ''build() {Column() {TextInput({ placeholder: '请输入账号' }).caretColor(Color.Blue).onChange((value: string) => {this.text = value})Text(this.text)}}
}
Button
点击事件
@Entry
@Component
struct Test {@State num: number = 0build() {Column() {Button('click me', { type: ButtonType.Capsule, stateEffect: true }).onClick(() => {this.num+=1})Text(this.num.toString())}}
}
type用于定义按钮样式三种Capsule,Normal,Circle
stateEffect用于设置按钮按下时是否开启切换效果,当状态置为false时,点击效果关闭,默认值为true。
图标按钮
@Entry
@Component
struct Test {build() {Column() {Button({ type: ButtonType.Circle, stateEffect: true }) {// Image($r('app.media.startIcon'))// .width(30)// .height(30)SymbolGlyph($r('sys.symbol.ohos_folder_badge_plus')).fontSize(45)}.width(55).height(55).backgroundColor(0x00FF00)}}
}
LoadingProgress
LoadingProgress().color(Color.Blue).height(60).width(60)
Foreach
接口如下
ForEach(arr: Array,itemGenerator: (item: any, index: number) => void,keyGenerator?: (item: any, index: number) => string
)
简单应用如下,
@Entry
@Component
struct Index {@State simpleList: Array<string> = ['one', 'two', 'three'];build() {Column() {ForEach(this.simpleList, (item: string,index:number) => {Text(`${index} : `+item).fontSize(50)}, (item: string) => item)}}
}
List
如下,需要先用List,再使用ListItem指定显示项
@Entry
@Component
struct Index {@State results:number[] = [1,2,3,4,5,6]build() {List() {ForEach(this.results,(item:number)=>{ListItem(){Text(item.toString()).fontSize(30).width('100%').height('30%').borderWidth(1).borderColor(0x000000)}})}}
}
弹窗
简单提醒
基于模态窗口
Button('删除').onClick(() => {if (this.selectedCardList.length == 0) {AlertDialog.show({message: '已经删完了喔',autoCancel: true,alignment: DialogAlignment.Bottom,})}
简单提醒2
onBackPress(){if (this.isShowToast()) {prompt.showToast({message: $r('app.string.prompt_text'),duration: 1000});this.clickBackTimeRecord = new Date().getTime();return true;}return false;}
样式复用
使用@Style装饰,但只能在本文件中复用,说实话有点鸡肋
组件封装
class Article {id: string;title: string;brief: string;constructor(id: string, title: string, brief: string) {this.id = id;this.title = title;this.brief = brief;}
}@Entry
@Component
struct ArticleListView {@State isListReachEnd: boolean = false;@State articleList: Array<Article> = []aboutToAppear(): void {for (let i = 1; i <= 4; i++) {const id = i.toString().padStart(3, '0'); // 格式化ID,如 '001', '002', etc.const title = `第${i}篇文章`;const content = '文章简介内容';this.articleList.push(new Article(id, title, content));}}loadMoreArticles() {this.articleList.push(new Article('007', '加载的新文章', '文章简介内容'));}build() {Column({ space: 5 }) {List() {ForEach(this.articleList, (item: Article) => {ListItem() {ArticleCard({ article: item }).margin({ top: 20 })}}, (item: Article) => item.id)}.padding(20).scrollBar(BarState.Off)}.width('100%').height('100%').backgroundColor(0xF1F3F5)}
}@Component
struct ArticleCard {@Prop article: Article;build() {Row() {Image($r('app.media.startIcon')).width(80).height(80).margin({ right: 20 })Column() {Text(this.article.title).fontSize(20).margin({ bottom: 8 })Text(this.article.brief).fontSize(16).fontColor(Color.Gray).margin({ bottom: 8 })}.alignItems(HorizontalAlign.Start).width('80%').height('100%')}.padding(20).borderRadius(12).backgroundColor('#FFECECEC').height(120).width('100%').justifyContent(FlexAlign.SpaceBetween)}
}
布局
动画
导航及传参
页面跳转,以及使用provide和consume进行传参
Main Page
import { DetailPage } from './DetailPage';@Entry
@Component
struct MainPage {@Provide('pageInfos') pageInfos: NavPathStack = new NavPathStack()@Provide param: string ='param';build() {Column() {Navigation(this.pageInfos) {Button('Next Page').align(Alignment.Center).margin({ top: 100 }).borderRadius(12).onClick(() => {this.pageInfos.pushPathByName("DetailPage",'')});}.title("Main Page").navDestination(this.PageMap);}}@BuilderPageMap(name: string) {if (name === "DetailPage") {DetailPage(); // 调用详情页面}}
}
Detail Page
@Component
export struct DetailPage {@Consume('pageInfos') pageInfos: NavPathStack;@Consume param: string;build() {NavDestination() {Column() {Text(this.param).fontSize(30).margin({ top: 20 });}}.title("Detail Page").onBackPressed(() => {this.pageInfos.pop();return true;});}
}
生命周期事件
页面生命周期
被@Entry装饰的组件生命周期
onPageShow:页面每次显示时触发一次,包括路由过程、应用进入前台等场景
onPageHide:页面每次隐藏时触发一次,包括路由过程、应用进入前后台等场景
onBackPress:当用户点击返回按钮时触发。
组件生命周期
被@Component装饰的自定义组件的生命周期
aboutToAppear:组件即将出现时回调该接口,具体时机为在创建自定义组件的新实例后,在执行其build()函数之前执行。
aboutToDisappear:在自定义组件即将析构销毁时执行。
onAppear:是每个组件的属性方法,在该组件显示时触发此回调。
设备信息
屏幕信息
// 获取屏幕分辨率
getDisplayInfo() {// 获取默认显示器const defaultDisplay = display.getDefaultDisplaySync()// 获取屏幕高度this.displayHeight = defaultDisplay.height// 获取屏幕宽度this.displayWidth = defaultDisplay.width// 获取屏幕刷新率this.displayRefreshRate = defaultDisplay.refreshRate// 获取像素密度this.displayDensityDPI = defaultDisplay.densityDPI
}
在使用previewer获取到的信息都是0,所以在开发的时候先设定定值
// private deviceWidth:number = display.getDefaultDisplaySync().width; // private deviceHeight:number = display.getDefaultDisplaySync().height;private deviceWidth:number = 1080; private deviceHeight:number = 2340;
网络状态
网络权限
在module.json5中配置网络权限
"requestPermissions": [{"name": "ohos.permission.GET_NETWORK_INFO"// 获取网络信息权限}],
IP
//获取 IP 地址
getIPAddress() {// 获取默认网络const netHandle = connection.getDefaultNetSync()// 获取网络连接信息const connectionProperties = connection.getConnectionPropertiesSync(netHandle)// 提取链路信息const linkAddress = connectionProperties.linkAddresses?.[0]if (linkAddress) {// 提取 IP 地址this.IPAddress = linkAddress.address.address}
}
网络类型
// 获取网络类型
getConnection() {const hasDefaultNet = connection.hasDefaultNetSync() // 是否有默认网络// 没有网络if (!hasDefaultNet) {this.netBearType = '无网络连接'} else {this.getConnectionNetBearType()}
}// 获取网络类型
getConnectionNetBearType() {// 1. 获取默认网络const defaultNet = connection.getDefaultNetSync()// 2. 获取网络能力信息const netCapabilities = connection.getNetCapabilitiesSync(defaultNet)// 3. 判断网络类型if (netCapabilities.bearerTypes.includes(connection.NetBearType.BEARER_ETHERNET)) {this.netBearType = '以太网网络'} else if (netCapabilities.bearerTypes.includes(connection.NetBearType.BEARER_WIFI)) {this.netBearType = 'WIFI网络'} else if (netCapabilities.bearerTypes.includes(connection.NetBearType.BEARER_CELLULAR)) {this.netBearType = '蜂窝网络'}
}
相关文章:
华为鸿蒙开发笔记
记在前面 官方文档链接 因无法直接使用chatgpt进行编程(悲,2024/10),故记录笔记,方便查阅,基于arkts语言 DevEco 中文 deveco是默认有中文包的,所以在市场里面搜不错,而应该在已安装里面搜索,然后启用就行了 测试 对ts进行单独测试 打开entry/src/test/LocalUnit.test.…...

Go语言Gin框架的常规配置和查询数据返回json示例
文章目录 路由文件分组查询数据库并返回jsonservice层controller路由运行效果 启动多个服务 在 上一篇文章《使用Go语言的gorm框架查询数据库并分页导出到Excel实例》 中主要给大家分享了较多数据的时候如何使用go分页导出多个Excel文件并合并的实现方案,这一篇文章…...

JavaEE----多线程(二)
文章目录 1.进程的状态2.线程的安全引入3.线程安全的问题产生原因4.synchronized关键字的引入4.1修饰代码块4.2修饰实例方法4.3修饰静态方法4.4对象头介绍4.5死锁-可重入的特性 5.关于死锁的分析总结5.1死锁的分析5.2死锁成因的必要条件5.3死锁的解决方案 1.进程的状态 public…...

【K8S】快速入门Kubernetes
之前企业都是使用容器化和来构建自己的服务和应用程序,其中容器化优点有很多:提升了部署效率、稳定性、提高了资源的利用率降低了成本。 但是也带来了一些新的问题:容器的数量变得很多,管理就是一个新的问题。所以Kubernetes就出…...
如何在 MySQL 中处理大量的 DELETE 操作??
全文目录: 开篇语前言摘要简介概述DELETE 操作的基本概念常用的 DELETE 方法 核心源码解读简单 DELETE 语句批量 DELETE 示例 案例分析案例1:使用简单 DELETE 删除用户数据案例2:使用分批 DELETE 应用场景演示场景1:用户管理系统场…...

LabVIEW中句柄与引用
在LabVIEW中,句柄(Handle) 是一种用于引用特定资源或对象的标识符。它类似于指针,允许程序在内存中管理和操作复杂的资源,而不需要直接访问资源本身。句柄用于管理动态分配的资源,如队列、文件、网络连接、…...

【三十四】【QT开发应用】音量图标以及滑动条,没有代码补全的小技巧
效果展示 鼠标位于音量图标区域内,显示出滑动条。鼠标移出音量图标区域内滑动条隐藏。鼠标点击音量图标,如果此时音量为0,音量变成50,如果此时音量不为零,音量变为0。 CVolumeButton.h 音量图标头文件 #pragma once …...
Android修改第三方应用相机方向
以下修改基于Android7.1 diff --git a/frameworks/base/core/java/android/hardware/Camera.java b/frameworks/base/core/java/android/hardware/Camera.java index 8c7434b..7201481 100755 --- a/frameworks/base/core/java/android/hardware/Camera.java b/frameworks/ba…...
Python 读取文件汇总
readline和readlines的区别 使用 open()读取文件时,readline是读取文件的一行;而readlines是加载全部文档,以list形式保存每一行内容。 使用with避免资源泄露 with语句不仅限于open()函数,任何实现了上下文管理协议的对象都可以…...

云原生:一张图了解devops 中CI/CD
一个典型的云原生应用的开发和部署过程,其中涉及到的主要工具有 Git、Docker、Jenkins/CircleCI、Ansible、Kubernetes 等。以下是每个步骤的简要说明: 开发人员(Developers)使用 Git 进行版本控制,他们将代码推送到 G…...

无人机之自组网通信技术篇
无人机的自组网通信技术是一种利用无人机作为节点,通过无线通信技术实现节点间自主组网、动态路由和数据传输的技术。 一、技术原理与特点 技术原理:无人机自组网技术基于自组织网络(Ad-Hoc Network)的原理,通过无线…...
【WebLogic】Oracle发布2024年第四季度中间件安全公告
Oracle于美国时间2024年10月15日发布了 WebLogic 12c(12.2.1.4.0)和14c(14.1.1.0.0)两个大版本2024年第4季度的安全公告,涉及漏洞ID共计 6 个,包含2个高危漏洞 2 个,4个中危漏洞,其中…...
Java集合(3:Set和Map)
文章目录 Set概述哈希值HashSet去重原理LinkedHashSetTreeSet自定义排序规则 Map概述Map的基本方法Map集合的获取功能哈希表HashMap底层源码 特点注意 Set 概述 Set集合也是一个接口,继承自Collection,与List类似,都需要通过实现类来进行操…...

【Golang】Gin框架中如何定义路由
✨✨ 欢迎大家来到景天科技苑✨✨ 🎈🎈 养成好习惯,先赞后看哦~🎈🎈 🏆 作者简介:景天科技苑 🏆《头衔》:大厂架构师,华为云开发者社区专家博主,…...

CPU内存飙升
CPU 飙升介绍 CPU 飙升是指中央处理器(CPU)的使用率在短时间内急剧上升,达到一个较高的水平。正常情况下,CPU 会根据系统和应用程序的需求合理分配资源,使用率会在一定范围内波动。但当 CPU 飙升时,可能会导…...

【Java】LinkedList实现类的使用
LinkedList实现类的使用 package com.star.test04;import java.util.Iterator;import java.util.LinkedList;/** * author : Starshine */public class Test { //这是main方法,程序的入口 public static void main(String[] args) { /* LinkedL…...

创建人物状态栏
接下来,我们来尝试制作一下我们的UI,我们会学习unity基本的UI系统 ************************************************************************************************************** 我们要先安装一个好用的插件到我们的unity当中,帮助…...
django5入门【01】环境配置
注意: ⭐前提:安装了annaconda(python版本管理工具),如果没有安装,强烈建议安装一下!!!操作: 前言: 这里新创建一个名为“python_3.11_start_dja…...

1000集《楼兰》系列短剧开机仪式在疆举行,开启全球传播新篇章
2024年10月18日,光明媚,秋风送爽。 在这个收获的季节里,倍受期待的楼兰系列短剧《楼兰之天女归来》和《楼兰之时空秘宝》在新疆吐鲁番东方红卓览文化博物馆举行了隆重的开机仪式,正式拉开了摄制的序幕。 1000集《楼兰》系列短剧…...

【景观生态学实验】实验五 景观生态脆弱性评价
实验目的 1.学习层次分析模型思路,对丹江口库区2000年景观生态脆弱性评价建模:通过实验课的学习,深入理解层次分析(Analytic Hierarchy Process,AHP)理论与模型,了解其在决策问题中的应用&…...
后进先出(LIFO)详解
LIFO 是 Last In, First Out 的缩写,中文译为后进先出。这是一种数据结构的工作原则,类似于一摞盘子或一叠书本: 最后放进去的元素最先出来 -想象往筒状容器里放盘子: (1)你放进的最后一个盘子(…...

ESP32 I2S音频总线学习笔记(四): INMP441采集音频并实时播放
简介 前面两期文章我们介绍了I2S的读取和写入,一个是通过INMP441麦克风模块采集音频,一个是通过PCM5102A模块播放音频,那如果我们将两者结合起来,将麦克风采集到的音频通过PCM5102A播放,是不是就可以做一个扩音器了呢…...

CocosCreator 之 JavaScript/TypeScript和Java的相互交互
引擎版本: 3.8.1 语言: JavaScript/TypeScript、C、Java 环境:Window 参考:Java原生反射机制 您好,我是鹤九日! 回顾 在上篇文章中:CocosCreator Android项目接入UnityAds 广告SDK。 我们简单讲…...
WEB3全栈开发——面试专业技能点P2智能合约开发(Solidity)
一、Solidity合约开发 下面是 Solidity 合约开发 的概念、代码示例及讲解,适合用作学习或写简历项目背景说明。 🧠 一、概念简介:Solidity 合约开发 Solidity 是一种专门为 以太坊(Ethereum)平台编写智能合约的高级编…...
Spring AI 入门:Java 开发者的生成式 AI 实践之路
一、Spring AI 简介 在人工智能技术快速迭代的今天,Spring AI 作为 Spring 生态系统的新生力量,正在成为 Java 开发者拥抱生成式 AI 的最佳选择。该框架通过模块化设计实现了与主流 AI 服务(如 OpenAI、Anthropic)的无缝对接&…...
【C语言练习】080. 使用C语言实现简单的数据库操作
080. 使用C语言实现简单的数据库操作 080. 使用C语言实现简单的数据库操作使用原生APIODBC接口第三方库ORM框架文件模拟1. 安装SQLite2. 示例代码:使用SQLite创建数据库、表和插入数据3. 编译和运行4. 示例运行输出:5. 注意事项6. 总结080. 使用C语言实现简单的数据库操作 在…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...

springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...

MySQL 知识小结(一)
一、my.cnf配置详解 我们知道安装MySQL有两种方式来安装咱们的MySQL数据库,分别是二进制安装编译数据库或者使用三方yum来进行安装,第三方yum的安装相对于二进制压缩包的安装更快捷,但是文件存放起来数据比较冗余,用二进制能够更好管理咱们M…...
CSS | transition 和 transform的用处和区别
省流总结: transform用于变换/变形,transition是动画控制器 transform 用来对元素进行变形,常见的操作如下,它是立即生效的样式变形属性。 旋转 rotate(角度deg)、平移 translateX(像素px)、缩放 scale(倍数)、倾斜 skewX(角度…...