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

鸿蒙学习笔记(3)-像素单位、this指向问题、RelativeContainer布局、@Style装饰器和@Extend装饰器

一、像素单位

物理像素:用px表示。

逻辑像素:在布局的时候,底层针对物理像素和屏幕尺寸关系进行转化的中间层。

分辨率:代表在屏幕上到底布局了多少了像素点(发光点)

官方同时也提供了相关单位,在开发中使用官方提供的来实现。

名称描述
px屏幕物理像素单位。
vp

屏幕密度相关像素,根据屏幕像素密度转换为屏幕物理像素,当数值不带单位时,默认单位vp。

说明:

vp与px的比例与屏幕像素密度有关。

fp字体像素,与vp类似适用屏幕密度变化,随系统字体大小设置变化。
lpx视窗逻辑像素单位,lpx单位为实际屏幕宽度与逻辑宽度(通过designWidth配置)的比值,designWidth默认值为720。当designWidth为720时,在实际宽度为1440物理像素的屏幕上,1lpx为2px大小。

 二、this指向问题

(1)使用场景

面向对象开发的时候,会出现this的使用;在进行事件绑定的时候,也会涉及this调用指向;在箭头函数中我们也会用到this,准确判断他的指向。

(2)注意事项

1、this永远指向一个对象,即new出来的一个实例。

2、普通函数中的this,谁调用这个函数,默认this就指向谁。

3、箭头函数默认没有this指向,如果箭头函数中有this出现,一定指向父级作用域。

(3)总结

1、类模板中this默认占位符,如果你没有通过类来new一个对象,实际上类中的this就没有意义。

2、当你执行new操作符的时候,通过类模板创建出一个对象,类中的this代表new出来对象。

3、类中的函数和属性要相互调用,都必须通过this来进行调用。

4、事件函数中绑定了普通函数过后,内部的this默认指向事件源对象。

5、箭头函数谁使用了this,就指向谁,也就是父级作用域。

(4)改变this指向

call:可以传递多个参数,第一个表示当前this环境,第二个往后就是参数。call(this,1,2,3)

apply:可以传递两个参数,第一个当前this环境,第二个是参数数组。apply(this,[1,2,3])

bind:参数跟call一样,传递多个,但是返回一个函数。接收一个函数const fun=bind(this,1,2,3)  再调用一下 fun()

三、RelativeContainer布局

(1)概念

使得容器布局更加多样化,尤其涉及多个组件层叠,设计各个子组件之间的位置调整。

  • 容器内子组件区分水平方向,垂直方向:
    • 水平方向为left, middle, right,对应容器的HorizontalAlign.Start, HorizontalAlign.Center, HorizontalAlign.End。
    • 垂直方向为top, center, bottom,对应容器的VerticalAlign.Top, VerticalAlign.Center, VerticalAlign.Bottom。

注意理解:子组件相对于父容器位置变化时定位线的位置变化

(2)相对容器布局

1、相对父容器特性

1.1 在RelativeContainer容器中设置子元素,默认情况没有设置子元素的相对偏移,默认所有元素是层叠在一起的,对齐方式是容器左上角。

1.2 在RelativeContainer容器中,子元素可以设置偏移位置,难点:子元素可以以RelativeContainer父元素容器作为参考,当然也可以以其他子元素作为偏移参考。

anchor:参考锚点设置

.alignRules({

//可以给子组件设置一个属性,代表子元素设置相对位置,组要提供参考元素和子元素指定水平方向哪一边作为参考线,以及父级元素的参考线

.alignRules({

top: { anchor: "__container__", align: VerticalAlign.Top },//子组件顶部以container父容器作为参考,以父容器垂直方向顶部对齐

right: { anchor: "__container__", align: HorizontalAlign.End }//子组件右边以container父容器作为参考,以父容器水平方向右边对齐

})

ps:跟学过的相对定位有点类似,position:绝对定位,确定子组件相对父组件的位置(相对父组件)。

可以使用offset来设置子元素定位好以后的细节

.offset({

x:-10,y:10             //向左偏移,向下偏移10

})

2、相对子元素特性 

如果想要以子元素作为参考,需要给你的子组件设置一个id作为唯一标识,anchor锚点参考改为你想参考的子组件的唯一标识id,其余用法思路根父组件是一样的。

每次移动一个子元素时,参考的那个子元素要固定下来,如果参考的子元素的位置发生了变化,其他以它作为参考对象的子元素都会受到影响。

四、@Style装饰器

一、简介

在我们页面开发的过程中,将一个页面中重复的一些样式代码提取出来实现公用,并且只负责当前页面的样式复用,有组件内定义和组件外定义两种,组件外定义记得加fuction。

二、注意事项

1、不是所有的样式都有可以提取到@Style装饰器装饰器中,只可以抽取公共样式事件。

2、@Style不支持传参

3、可以在组件下继续添加一样的样式来覆盖掉@Style装饰器复用的样式。

五、@Extend装饰器

一、简介

定义扩展组建的样式,主要用于鸿蒙中原生组件的样式和事件进行扩展,换句话说,就是可以用这个装饰器对原生组件进行重定义,在页面实现复用,类似于@Style装饰器效果。

二、注意事项

1、必须指定对哪个原生组件进行拓展。

2、和@Styles不同,@Extend仅支持在全局定义,不支持在组件内部定义。

3、和@Styles不同,@Extend装饰的方法支持参数,开发者可以在调用时传递参数,调用遵循TS方法传值调用。

4、@Extend的参数可以为状态变量,当状态变量改变时,UI可以正常的被刷新渲染。


http://www.kler.cn/a/613547.html

相关文章:

  • 【NLP 50、损失函数 KL散度】
  • Unity 简单使用Addressables加载SpriteAtlas图集资源
  • java使用aspose添加多个图片到word
  • 3.27-1 pymysql下载及使用
  • Stable Diffusion 基础模型结构超级详解!
  • 用 pytorch 从零开始创建大语言模型(七):根据指示进行微调
  • TextGrad:案例
  • 横扫SQL面试——事件流处理(峰值统计)问题
  • SDL —— 将sdl渲染画面嵌入Qt窗口显示(附:源码)
  • CSS回顾-Flex弹性盒布局
  • Vue $bus被多次触发
  • 【WPF】ListView数据绑定
  • 【AI工具开发】Notepad++插件开发实践:从基础交互到ScintillaCall集成
  • C语言之链表
  • 分布式光伏防逆流如何实现?
  • 每日免费分享之精品wordpress主题系列~DAY16
  • 云原生四重涅槃·破镜篇:混沌工程证道心,九阳真火锻金身
  • 可视化图解算法:递归基础
  • Pyside6介绍和开发第一个程序
  • GPT4o漫画制作(小白教程)