鸿蒙4.0开发
文章平均质量分 91
昉钰
这个作者很懒,什么都没留下…
展开
-
相对布局(RelativeContainer)
为采用相对布局的容器,支持容器内部的子元素设置相对位置关系。子元素支持指定兄弟元素作为锚点,也支持指定父容器作为锚点,基于锚点做相对位置布局。下图是一个RelativeContainer的概念图,图中的虚线表示位置的依赖关系。图1相对布局示意图子元素并不完全是上图中的依赖关系。比如,Item4可以以Item2为依赖锚点,也可以以RelativeContainer父容器为依赖锚点。原创 2024-01-16 16:28:27 · 1961 阅读 · 0 评论 -
使用画布绘制自定义图形(Canvas)
使用CanvasRenderingContext2D对象在Canvas画布上绘制。@Entry@Component//用来配置CanvasRenderingContext2D对象的参数,包括是否开启抗锯齿,true表明开启抗锯齿。//用来创建CanvasRenderingContext2D对象,通过在canvas中调用CanvasRenderingContext2D对象来绘制。build() {//在canvas中调用CanvasRenderingContext2D对象。原创 2024-01-15 00:15:00 · 2276 阅读 · 0 评论 -
绘制几何图形(Shape)
绘制组件用于在页面绘制图形,Shape组件是绘制组件的父组件,父组件中会描述所有绘制组件均支持的通用属性。具体用法请参考。原创 2024-01-13 22:23:57 · 1239 阅读 · 0 评论 -
层叠布局(Stack)
层叠布局(StackLayout)用于在屏幕上预留一块区域来显示组件中的元素,提供元素可以重叠的布局。层叠布局通过Stack容器组件实现位置的固定定位与层叠,容器中的子元素(子组件)依次入栈,后一个子元素覆盖前一个子元素,子元素可以叠加,也可以设置位置。层叠布局具有较强的页面层叠、位置定位能力,其使用场景有广告、卡片层叠效果等。如图1,Stack作为容器,容器内的子元素(子组件)的顺序为Item1->Item2->Item3。图1层叠布局。原创 2024-01-13 21:16:23 · 1161 阅读 · 0 评论 -
弹性布局(Flex)
弹性布局(Flex)提供更加有效的方式对容器中的子元素进行排列、对齐和分配剩余空间。容器默认存在主轴与交叉轴,子元素默认沿主轴排列,子元素在主轴方向的尺寸称为主轴尺寸,在交叉轴方向的尺寸称为交叉轴尺寸。弹性布局在开发场景中用例特别多,比如页面头部导航栏的均匀分布、页面框架的搭建、多行数据的排列等等。图1主轴为水平方向的Flex容器示意图。原创 2024-01-12 17:07:13 · 2326 阅读 · 0 评论 -
线性布局(Row/Column)
线性布局(LinearLayout)是开发中最常用的布局,通过线性容器Row和Column构建。线性布局是其他布局的基础,其子元素在线性方向上(水平方向和垂直方向)依次排列。线性布局的排列方向由所选容器组件决定,Column容器内子元素按照垂直方向排列,Row容器内子元素按照水平方向排列。根据不同的排列方向,开发者可选择使用Row或Column容器创建线性布局。图1Column容器内子元素排列示意图图2Row容器内子元素排列示意图。原创 2024-01-12 10:08:34 · 2267 阅读 · 0 评论 -
添加气泡与菜单
其中PopupOptions为系统提供的气泡,通过配置primaryButton、secondaryButton来设置带按钮的气泡。文本提示气泡常用于只展示带有文本的信息提示,不带有任何交互的场景。Popup属性需绑定组件,当bindPopup属性中参数show为true的时候会弹出气泡提示。在Button组件上绑定Popup属性,每次点击Button按钮,handlePopup会切换布尔值,当其为true时,触发bindPopup弹出气泡。气泡分为两种类型,一种是系统提供的气泡。参数来设置自定义的气泡。原创 2024-01-11 13:30:23 · 1421 阅读 · 0 评论 -
栅格布局(GridRow/GridCol)
栅格布局是一种通用的辅助定位工具,对移动设备的界面设计有较好的借鉴作用。提供可循的规律:栅格布局可以为布局提供规律性的结构,解决多尺寸多设备的动态布局问题。通过将页面划分为等宽的列数和行数,可以方便地对页面元素进行定位和排版。统一的定位标注:栅格布局可以为系统提供一种统一的定位标注,保证不同设备上各个模块的布局一致性。这可以减少设计和开发的复杂度,提高工作效率。灵活的间距调整方法:栅格布局可以提供一种灵活的间距调整方法,满足特殊场景布局调整的需求。原创 2024-01-11 10:32:27 · 3050 阅读 · 0 评论 -
创建网格(Grid/GridItem)
网格布局是由“行”和“列”分割的单元格所组成,通过指定“项目”所在的单元格做出各种各样的布局。网格布局具有较强的页面均分能力,子组件占比控制能力,是一种重要自适应布局,其使用场景有九宫格图片展示、日历、计算器等。ArkUI提供了Grid容器组件和子组件GridItem,用于构建网格布局。Grid用于设置网格布局相关参数,GridItem定义子组件相关特征。Grid组件支持使用条件渲染、循环渲染、懒加载等渲染控制方式生成子组件。原创 2024-01-10 13:33:50 · 1178 阅读 · 0 评论 -
创建轮播(Swiper)
组件提供滑动轮播显示的能力。Swiper本身是一个容器组件,当设置了多个子组件后,可以对这些子组件进行轮播显示。通常,在一些应用首页显示推荐的内容时,需要用到轮播显示的能力。原创 2024-01-09 13:14:10 · 1928 阅读 · 0 评论 -
鸿蒙应用中的通知
应用可以通过通知接口发送通知消息,终端用户可以通过通知栏查看通知内容,也可以点击通知来打开应用。通知常见的使用场景:显示接收到的短消息、即时消息等。显示应用的推送消息,如广告、版本更新等。显示当前正在进行的事件,如下载等。HarmonyOS通过ANS(Advanced Notification Service,通知系统服务)对通知类型的消息进行管理,支持多种通知类型,如基础类型通知、进度条类型通知。原创 2024-01-05 16:44:44 · 1930 阅读 · 0 评论 -
TypeScript 类
TypeScript 是面向对象的 JavaScript。类描述了所创建的对象共同的属性和方法。支持面向对象的所有特性,比如 类、接口等。− 字段是类里面声明的变量。字段表示对象的有关数据。− 类实例化时调用,可以为类的对象分配内存。− 方法为对象要执行的操作。原创 2024-01-05 14:05:58 · 810 阅读 · 0 评论 -
TypeScript接口、对象
以下实例中,我们定义了一个接口 IPerson,接着定义了一个变量 customer,它的类型是 IPerson。customer 实现了接口 IPerson 的属性和方法。接口是一系列抽象方法的声明,是一些方法特征的集合,这些方法都应该是抽象的,需要由具体的类去实现,然后第三方就可以通过这组抽象方法调用,让具体的类执行具体的方法。接口继承就是说接口可以通过其他接口来扩展自己。接口中我们可以将数组的索引值和元素设置为不同类型,索引值可以是数字或字符串。接口不能转换为 JavaScript。原创 2024-01-05 11:28:09 · 581 阅读 · 0 评论 -
TypeScript中的元组、Map及联合
这里介绍下TypeScript中的元组、Map、联合;元组这个概念在Java中并没有,但是用过kotlin的肯定比较熟悉,Map算是数据结构中一个比较熟悉的概念了;而联合在Java中是没有这个概念的,C++中则有union类型的支持。原创 2024-01-05 10:24:38 · 1911 阅读 · 0 评论 -
鸿蒙应用中图片的显示(Image组件)
开发者经常需要在应用中显示一些图片,例如:按钮中的icon、网络图片、本地图片等。在应用中显示图片需要使用Image组件实现,Image支持多种图片格式,包括png、jpg、bmp、svg和gif,具体用法请参考组件。该接口通过图片数据源获取图片,支持本地图片和网络图片的渲染展示。其中,src是图片的数据源,加载方式请参考。原创 2024-01-04 15:02:40 · 5394 阅读 · 0 评论 -
TypeScript Array(数组)
数组对象是使用单独的变量名来存储一系列的值。这样看起来就简洁多了。原创 2024-01-04 11:03:21 · 924 阅读 · 0 评论 -
TypeScript函数
我们知道鸿蒙开发用的是ts语言(TypeScript),所以这里穿插介绍下ts的函数,注意介绍些于Java有差别或者特殊的地方。原创 2024-01-04 10:16:41 · 970 阅读 · 0 评论 -
页面间转场动画
两个页面间发生跳转,一个页面消失,另一个页面出现,这时可以配置各自页面的页面转场参数实现自定义的页面转场效果。效果写在pageTransition函数中,通过PageTransitionEnter和PageTransitionExit指定页面进入和退出的动画效果。上述接口定义了PageTransitionEnter和PageTransitionExit组件,可通过slide、translate、scale、opacity属性定义不同的页面转场效果。原创 2024-01-03 11:28:45 · 1284 阅读 · 0 评论 -
页面间动画之放大缩小视图
在不同页面间,有使用相同的元素(例如同一幅图)的场景,可以使用动画衔接。为了突出不同页面间相同元素的关联性,可为它们添加共享元素转场动画。如果相同元素在不同页面间的大小有明显差异,即可达到放大缩小视图的效果。其中根据sharedTransitionOptions中的type参数,共享元素转场分为Exchange类型的共享元素转场和Static类型的共享元素转场。原创 2024-01-03 11:04:27 · 558 阅读 · 0 评论 -
页面内动画之弹簧曲线动画
ArkUI提供了,指定了动画属性从起始值到终止值的变化规律,如Linear、Ease、EaseIn等。同时,ArkUI也提供了由弹簧振子物理模型产生的弹簧曲线。通过弹簧曲线,开发者可以设置超过设置的终止值,在终止值附近震荡,直至最终停下来的效果。弹簧曲线的动画效果比其他曲线具有更强的互动性、可玩性。弹簧曲线的接口包括两类,一类是,另一类是和,这两种方式都可以产生弹簧曲线。原创 2024-01-03 10:48:53 · 1043 阅读 · 0 评论 -
页面内动画之组件内转场动画
组件的插入、删除过程即为组件本身的转场过程,组件的插入、删除动画称为组件内转场动画。通过组件内转场动画,可定义组件出现、消失的效果。函数的入参为组件内转场的效果,可以定义平移、透明度、旋转、缩放这几种转场样式的单个或者组合的转场效果,必须和一起使用才能产生组件转场效果。原创 2024-01-03 10:27:17 · 861 阅读 · 0 评论 -
页面内动画之布局更新动画
(animateTo)和(animation)是ArkUI提供的最基础和常用的动画功能。在布局属性(如)发生变化时,可以通过属性动画或显式动画,按照动画参数过渡到新的布局参数状态。动画类型特点显式动画闭包内的变化均会触发动画,包括由数据变化引起的组件的增删、组件属性的变化等,可以做较为复杂的动画。属性动画动画设置简单,属性变化时自动触发动画。原创 2024-01-03 09:58:05 · 1130 阅读 · 0 评论 -
转场动画&路径动画
转场动画有三种类型,页面间转场、组件内转场、共享元素转场。原创 2023-12-26 00:15:00 · 345 阅读 · 0 评论 -
ArkUI动画概述
动画的原理是在一个时间段内,多次改变UI外观,由于人眼会产生视觉暂留,所以最终看到的就是一个“连续”的动画。UI的一次改变称为一个动画帧,对应一次屏幕刷新,而决定动画流畅度的一个重要指标就是帧率FPS(Frame Per Second),即每秒的动画帧数,帧率越高则动画就会越流畅。动画参数包含了如动画时长、变化规律(即曲线)等参数。ArkUI提供的动画能力按照页面的分类方式,可分为页面内的动画和页面间的动画。如下图所示,页面内的动画指在一个页面内即可发生的动画,页面间的动画指两个页面跳转时才会发生的动画。原创 2023-12-25 14:59:51 · 571 阅读 · 0 评论 -
LazyForEach常见使用问题
上篇我们介绍了LazyForEach的基本使用,展示了如何使用LazyForEach构造一个列表,并演示数据的添加、删除、修改如何与LazyForEach配合并正确的更新UI。本篇将介绍使用LazyForEach的时候会遇到的一些常见问题。原创 2023-12-25 14:24:04 · 729 阅读 · 0 评论 -
方舟开发框架(ArkUI)概述
ArkTSArkTS是UI开发语言,基于TypeScript(简称TS)语言扩展而来,是TS的超集。扩展能力包含各种装饰器、自定义组件、UI描述机制。状态数据管理作为基于ArkTS的声明式开发范式的特色,通过功能不同的装饰器给开发者提供了清晰的页面更新渲染流程和管道。状态管理包括UI组件状态和应用程序状态,两者协作可以使开发者完整地构建整个应用的数据更新和UI渲染。ArkTS语言的基础知识请参考学习ArkTS语言。布局布局是UI的必要元素,它定义了组件在界面中的位置。原创 2023-12-24 21:36:24 · 1555 阅读 · 0 评论 -
数据懒加载LazyForEach
LazyForEach从提供的数据源中按需迭代数据,并在每次迭代过程中创建相应的组件。当在滚动容器中使用了LazyForEach,框架会根据滚动容器可视区域按需创建组件,当组件滑出可视区域外时,框架会进行组件销毁回收以降低内存占用。原创 2023-12-24 17:37:47 · 552 阅读 · 0 评论 -
循环渲染ForEach
Android开发中我们有ListView组件、GridView组件、RecyclerView组件,这些组件可以为我们创建一个列表;在鸿蒙开发中,则不一样,它没有类似Android中的组件,但是却提供了循环渲染机制ForEach接口帮助我们渲染一个列表,本节主要介绍该主题。ForEach接口基于数组类型数据来进行循环渲染,需要与容器组件配合使用,且接口返回的组件应当是允许包含在ForEach父容器组件中的子组件。例如,ListItem组件要求ForEach的父容器组件必须为。原创 2023-12-23 00:15:00 · 1786 阅读 · 0 评论 -
渲染控制之条件渲染
ArkTS提供了渲染控制的能力。条件渲染可根据应用的不同状态,使用if、else和else if渲染对应状态下的UI内容。原创 2023-12-23 00:15:00 · 80 阅读 · 0 评论 -
状态管理概述
ArkTS UI的状态管理到这里就叙述完了,现在做一个概述,也可以认为是一个总结。在声明式UI编程框架中,UI是程序状态的运行结果,用户构建了一个UI模型,其中应用的运行时的状态是参数。当参数改变时,UI作为返回结果,也将进行对应的改变。这些运行时的状态变化所带来的UI的重新渲染,在ArkUI中统称为状态管理机制。自定义组件拥有变量,变量必须被装饰器装饰才可以成为状态变量,状态变量的改变会引起UI的渲染刷新。如果不使用状态变量,UI只能在初始化时渲染,后续将不会再刷新。原创 2023-12-22 13:23:09 · 285 阅读 · 0 评论 -
其他状态管理
刷新开始之后 isRefreshing的状态会变为true,触发UI更新,刷新的过程中会触发自定义函数onRefresh,该函数中会改版isRefreshing为false,同时更新刷新次数counter,这些状态更新又会触发UI的更新,从而使得整个刷新过程能顺畅的进行。@Watch用于监听状态变量的变化,当状态变量变化时,@Watch的回调方法将被调用。同时,Text中的isRefreshing状态也会同步改变为true,如果不使用$$符号绑定,则不会同步改变。示例展示组件更新和@Watch的处理步骤。原创 2023-12-22 11:16:47 · 67 阅读 · 0 评论 -
应用全局的UI状态存储AppStorage
AppStorage是应用全局的UI状态存储,是和应用的进程绑定的,由UI框架在应用程序启动时创建,为应用程序UI状态属性提供中央存储。和AppStorage不同的是,LocalStorage是页面级的,通常应用于页面内的数据共享。而AppStorage是应用级的全局状态共享,还相当于整个应用的“中枢”,本文仅介绍AppStorage使用场景和相关的装饰器:@StorageProp和@StorageLink。都是通过和AppStorage中转,才可以和UI交互。原创 2023-12-21 16:04:11 · 614 阅读 · 0 评论 -
持久化存储UI状态:PersistentStorage
PersistentStorage将选定的AppStorage属性保留在设备磁盘上。应用程序通过API,以决定哪些AppStorage属性应借助PersistentStorage持久化。UI和业务逻辑不直接访问PersistentStorage中的属性,所有属性访问都是对AppStorage的访问,AppStorage中的更改会自动同步到PersistentStorage。PersistentStorage和AppStorage中的属性建立双向同步。原创 2023-12-21 17:29:55 · 273 阅读 · 0 评论 -
页面级UI状态存储LocalStorage
LocalStorage是页面级的UI状态存储,通过@Entry装饰器接收的参数可以在页面内共享同一个LocalStorage实例。LocalStorage也可以在UIAbility内,页面间共享状态。ocalStorage是ArkTS为构建页面级别状态变量提供存储的内存内“数据库”。应用程序决定LocalStorage对象的生命周期。当应用释放最后一个指向LocalStorage的引用时,比如销毁最后一个自定义组件,LocalStorage将被JS Engine垃圾回收。原创 2023-12-21 14:06:25 · 574 阅读 · 0 评论 -
状态管理之复杂对象
被@Observed装饰的类,可以被观察到属性的变化;子组件中@ObjectLink装饰器装饰的状态变量用于接收@Observed装饰的类的实例,和父组件中对应的状态变量建立双向数据绑定。这个实例可以是数组中的被@Observed装饰的项,或者是class object中的属性,这个属性同样也需要被@Observed装饰。单独使用@Observed是没有任何作用的,需要搭配@ObjectLink或者@Prop使用。原创 2023-12-20 11:21:10 · 243 阅读 · 0 评论 -
状态管理@Provide、@Consume
Provide装饰的状态变量自动对其所有后代组件可用,即该变量被“provide”给他的后代组件。由此可见,@Provide的方便之处在于,开发者不需要多次在组件之间传递变量。后代通过使用@Consume去获取@Provide提供的变量,建立在@Provide和@Consume之间的双向数据同步,与@State/@Link不同的是,前者可以在多层级的父子组件之间传递。@Provide和@Consume可以通过相同的变量名或者相同的变量别名绑定,变量类型必须相同。原创 2023-12-20 00:15:00 · 390 阅读 · 0 评论 -
状态管理@Link
子组件中被@Link装饰的变量与其父组件中对应的数据源建立双向数据绑定,父组件中数据的变化会反映到子组件中,同样子组件中数据的变化也会反映到父组件中。原创 2023-12-19 13:46:56 · 245 阅读 · 0 评论 -
状态管理@Prop
Prop主要用用于父组件到子组件的数据级联更新,父组件的数据变化会影响到子组件的数据变化,但发过来子组件的数据变化则不会影响到父组件的更新。被@Prop装饰的变量可以和父组件建立单向的同步关系。子组件中@Prop装饰的变量是可变的,但是变化不会同步回其父组件。原创 2023-12-19 11:21:30 · 132 阅读 · 0 评论 -
状态管理@State
被改装饰器修饰的变量,在数据变化时会触发UI的刷新,也就是ArkTS UI中触发build()函数的调用,重新根据状态构建UI。2、class类型 可以观察到自身的赋值的变化,和其属性赋值的变化(嵌套属性的赋值观察不到。1、string number boolean 类型的数据可以被监听到更新。原创 2023-12-18 18:35:41 · 165 阅读 · 0 评论