当前位置: 首页 > news >正文

华为鸿蒙开发笔记

记在前面

官方文档链接

因无法直接使用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文件并合并的实现方案&#xff0c;这一篇文章…...

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

之前企业都是使用容器化和来构建自己的服务和应用程序&#xff0c;其中容器化优点有很多&#xff1a;提升了部署效率、稳定性、提高了资源的利用率降低了成本。 但是也带来了一些新的问题&#xff1a;容器的数量变得很多&#xff0c;管理就是一个新的问题。所以Kubernetes就出…...

如何在 MySQL 中处理大量的 DELETE 操作??

全文目录&#xff1a; 开篇语前言摘要简介概述DELETE 操作的基本概念常用的 DELETE 方法 核心源码解读简单 DELETE 语句批量 DELETE 示例 案例分析案例1&#xff1a;使用简单 DELETE 删除用户数据案例2&#xff1a;使用分批 DELETE 应用场景演示场景1&#xff1a;用户管理系统场…...

LabVIEW中句柄与引用

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

【三十四】【QT开发应用】音量图标以及滑动条,没有代码补全的小技巧

效果展示 鼠标位于音量图标区域内&#xff0c;显示出滑动条。鼠标移出音量图标区域内滑动条隐藏。鼠标点击音量图标&#xff0c;如果此时音量为0&#xff0c;音量变成50&#xff0c;如果此时音量不为零&#xff0c;音量变为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()读取文件时&#xff0c;readline是读取文件的一行&#xff1b;而readlines是加载全部文档&#xff0c;以list形式保存每一行内容。 使用with避免资源泄露 with语句不仅限于open()函数&#xff0c;任何实现了上下文管理协议的对象都可以…...

云原生:一张图了解devops 中CI/CD

一个典型的云原生应用的开发和部署过程&#xff0c;其中涉及到的主要工具有 Git、Docker、Jenkins/CircleCI、Ansible、Kubernetes 等。以下是每个步骤的简要说明&#xff1a; 开发人员&#xff08;Developers&#xff09;使用 Git 进行版本控制&#xff0c;他们将代码推送到 G…...

无人机之自组网通信技术篇

无人机的自组网通信技术是一种利用无人机作为节点&#xff0c;通过无线通信技术实现节点间自主组网、动态路由和数据传输的技术。 一、技术原理与特点 技术原理&#xff1a;无人机自组网技术基于自组织网络&#xff08;Ad-Hoc Network&#xff09;的原理&#xff0c;通过无线…...

【WebLogic】Oracle发布2024年第四季度中间件安全公告

Oracle于美国时间2024年10月15日发布了 WebLogic 12c&#xff08;12.2.1.4.0&#xff09;和14c&#xff08;14.1.1.0.0&#xff09;两个大版本2024年第4季度的安全公告&#xff0c;涉及漏洞ID共计 6 个&#xff0c;包含2个高危漏洞 2 个&#xff0c;4个中危漏洞&#xff0c;其中…...

Java集合(3:Set和Map)

文章目录 Set概述哈希值HashSet去重原理LinkedHashSetTreeSet自定义排序规则 Map概述Map的基本方法Map集合的获取功能哈希表HashMap底层源码 特点注意 Set 概述 Set集合也是一个接口&#xff0c;继承自Collection&#xff0c;与List类似&#xff0c;都需要通过实现类来进行操…...

【Golang】Gin框架中如何定义路由

✨✨ 欢迎大家来到景天科技苑✨✨ &#x1f388;&#x1f388; 养成好习惯&#xff0c;先赞后看哦~&#x1f388;&#x1f388; &#x1f3c6; 作者简介&#xff1a;景天科技苑 &#x1f3c6;《头衔》&#xff1a;大厂架构师&#xff0c;华为云开发者社区专家博主&#xff0c;…...

CPU内存飙升

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

【Java】LinkedList实现类的使用

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

创建人物状态栏

接下来&#xff0c;我们来尝试制作一下我们的UI&#xff0c;我们会学习unity基本的UI系统 ************************************************************************************************************** 我们要先安装一个好用的插件到我们的unity当中&#xff0c;帮助…...

django5入门【01】环境配置

注意&#xff1a; ⭐前提&#xff1a;安装了annaconda&#xff08;python版本管理工具&#xff09;&#xff0c;如果没有安装&#xff0c;强烈建议安装一下&#xff01;&#xff01;&#xff01;操作&#xff1a; 前言&#xff1a; 这里新创建一个名为“python_3.11_start_dja…...

1000集《楼兰》系列短剧开机仪式在疆举行,开启全球传播新篇章

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

【景观生态学实验】实验五 景观生态脆弱性评价

实验目的 1.学习层次分析模型思路&#xff0c;对丹江口库区2000年景观生态脆弱性评价建模&#xff1a;通过实验课的学习&#xff0c;深入理解层次分析&#xff08;Analytic Hierarchy Process&#xff0c;AHP&#xff09;理论与模型&#xff0c;了解其在决策问题中的应用&…...

ChatGPT 现已登陆 Windows 平台

今天&#xff0c;OpenAI 宣布其人工智能聊天机器人平台 ChatGPT 已开始预览专用 Windows 应用程序。OpenAI 表示&#xff0c;该应用目前仅适用于 ChatGPT Plus、Team、Enterprise 和 Edu 用户&#xff0c;是一个早期版本&#xff0c;将在今年晚些时候推出"完整体验"。…...

和鲸社区数据科学实训季,西安交通大学圆满收官,西安,后会有期!

和鲸社区数据科学实训季活动已走进数十家高校&#xff0c;在西安的收官之站&#xff0c;落定西安交通大学管理学院&#xff0c;为本次西安之旅画上了圆满的句号。 和鲸社区 2024秋 数据科学实训季以“帮助同学积累真实场景项目经验”为出发点&#xff0c;提供 60 个数据科学实践…...

工作使用篇:如何在centos系统中安装anaconda

在CentOS 7上安装Anaconda的步骤如下&#xff1a; 1. 下载Anaconda 首先&#xff0c;你需要下载Anaconda的安装脚本。可以使用wget命令从Anaconda的官网获取最新版本的安装脚本。打开终端并运行以下命令&#xff1a; wget https://repo.anaconda.com/archive/Anaconda3-2024…...

qt creator 转 visual stdio 项目调试

因果 大家在使用qt creator调试程序时&#xff0c;会出现未知错误&#xff0c;比如下图&#xff0c;直接release运行就没有问题。由于调试复杂程序&#xff0c;使用qt creator都感觉不如vs&#xff0c;会报未知中断。 所以有了从qt creator转换到 visual stdio来调试的想法。…...

django5入门【02】创建新的django程序

注意&#xff1a; ⭐前提&#xff1a;已经安装了python以及django所依赖的包1、通过django-admin管理工具在命令行创建Django应用程序&#xff0c;创建命令如下&#xff1a; django-admin startproject ProjectName❓ 疑问&#xff1a;除了使用命令行创建django程序外&#x…...

乐趣无限,十个让你沉浸的“摸鱼”网站

在繁忙的生活中&#xff0c;我们总需要一些摸鱼时刻&#xff0c;来为紧绷的神经松绑。无论是工作间隙的小憩&#xff0c;还是下班后的放松&#xff0c;适当的摸鱼不仅能提升效率&#xff0c;还能让生活充满乐趣。今天&#xff0c;我为大家推荐几个绝对能让你乐在其中的网站&…...

ubuntu22.04 桌面系统怎么搭建一个esp-idf的项目,搭建开发环境

详细介绍如何在 Ubuntu 22.04 桌面系统上搭建 ESP-IDF 的开发环境&#xff0c;并创建一个 ESP-IDF 项目。以下内容将涵盖从环境准备到项目创建和编译的所有步骤。 目录 环境准备 1.1 更新系统1.2 安装必要的工具和依赖项 安装 ESP-IDF 2.1 克隆 ESP-IDF 仓库2.2 运行安装脚本 …...

iOS Swift逆向——deMangle过程中的偏移计算

碰到好多函数最开始都会调用这个函数&#xff0c;xref了一下&#xff0c;发现有上万个xref。 __int64 __fastcall sub_1000B6ED0(__int64 *a1) {__int64 result; // x0result *a1;if ( result < 0 ){result swift_getTypeByMangledNameInContext((char *)a1 (int)result…...

国产大模型基础能力大比拼 - 计数:通义千文 vs 文心一言 vs 智谱 vs 讯飞-正经应用场景的 LLM 逻辑测试

在大语言模型&#xff08;LLM&#xff09;不断涌现的时代&#xff0c;如何评估这些国产大模型的逻辑推理能力&#xff0c;尤其是在处理基础计数问题上的表现&#xff0c;成为了一个备受关注的话题。随着越来越多的国产大模型进入市场&#xff0c;比较它们在不同任务中的表现尤为…...

YOLO11改进 | 注意力机制 | 正确的 Self-Attention 与 CNN 融合范式,性能速度全面提升【独家创新】

秋招面试专栏推荐 &#xff1a;深度学习算法工程师面试问题总结【百面算法工程师】——点击即可跳转 &#x1f4a1;&#x1f4a1;&#x1f4a1;本专栏所有程序均经过测试&#xff0c;可成功执行&#x1f4a1;&#x1f4a1;&#x1f4a1; 卷积和自注意力是两种强大的表征学习技术…...