
HarmonyOS样式处理 原创
1.起步鸿蒙
ArkTS以声明方式组合和扩展组件来描述应用程序的UI;
同时还提供了基本的属性、事件和子组件配置方法,帮助开发者实现应用交互逻辑。
(1)样式属性
· 属性方法以“.”链式调用的方式配置系统组件的样式和其他属性。
(2)枚举值
· 对于系统组件,ArkUI还为其属性预定义了一些枚举类型。
样式相关属性通过链式函数的方式进行设置。
如果类型是枚举的,通过枚举传入对应的值。
注意:有的属性强烈建议使用枚举(大部分枚举值都是数字,但是数字无法体现代码含义)
有的组件如fontColor可以使用系统自带颜色枚举,也可以使用色值。
2.样式-单位vp和适配
知道 vp 单位,以及适配思想
(1) vp 是什么?virtual pixel
· 屏幕密度相关像素,根据屏幕像素密度转换为屏幕物理像素,当数值不带单位时,默认单位 vp;在实际宽度为1440物理像素的屏幕上,1vp 约等于 3px(物理像素)
在样式中,如果写px,那么px直接表示的是物理像素,也就是分辨率,那么手机分辨率密度各有不同,无法针对这种密度写一个固定值,所以vp会自动根据手机密度去进行适配,所以vp它提供了一种灵活的方式来适应不同屏幕密度的显示效果。
设计图按照1080设计- 换算成360写vp就可以了
上图的意思是,使用这个单位在不同屏幕物理分辨率的实际尺寸一致(A设备1英寸,B设备1英寸)。
(2)之前 vw 、rem 和 rpx 相对于屏幕宽度的单位,可以实现等比例适配,vp 可以吗?
运行效果如图:
我们发现:不同的设备屏幕的宽度 `vp` 是不一致的,那怎么适配呢?
(3)根据官方的文档,采用:伸缩布局,网格系统,栅格系统进行布局适配。
伸缩 layoutWeight(flex: number) 占剩余空间多少份,可以理解成CSS的
我们可以使用layoutWeight属性,让右侧内容去占满剩余宽度。
运行效果如图:
内容等比例缩放-可以使用aspectRatio属性设置宽高比。
设置元素宽高比 aspectRatio(ratio: number)。
如我们如果希望一个元素始终占整个屏幕宽度的50%,且为一个正方形。
测试代码如下:
运行效果
vp 是鸿蒙默认单位,和屏幕像素有关,最终表现视觉大小在任何设备一致
鸿蒙一般以伸缩 layoutWeight、网格、栅格进行布局适配,如要等比例缩放可以设置高宽比
3.Image和资源Resource
项目开发离不开图片-图片在页面中必须使用Image组件。
Image为图片组件,常用于在应用中显示图片。Image支持加载string、PixelMap和Resource类型的数据源,支持png、jpg、bmp、svg和gif类型的图片格式。
使用本地图片-拖一张图片放置到ets目录下-比如assets文件下
代码如下:
使用Resource下的图片-media
代码如下:
使用Resource下的图片-rawfile
代码如下:
使用网络图片
代码如下:
尤其注意:使用网络图片时,在preview中时,可以预览,但是在模拟器和真实项目中,必须申请网络权限
修改module.json5文件
2.1. 案例实操
接下来,我们手写一个知乎的评论
设计稿一般是1080px:(这里没有设计稿,提供了一些尺寸)。
· Nav
o 左侧返回按钮24vp高宽背景颜色#f5f5f5,图标12vp尺寸颜色#848484
o 标题18vp
· Comment
o 头像尺寸32vp高宽,右侧间距10vp
o 标题15vp,颜色默认
o 内容16vp,颜色#565656
o 底部12vp,颜色#c3c4c5
代码如下:
2.2. iconfont 中 svg 图片处理
只需要将 iconfont 里面图片的 svg 代码中的 path 字段中的 d 属性的值,复制到上面的 path 字段的 d 属性中的即可。
4.样式-@Styles 复用
注意:Styles和Extend均只支持在当前文件下的全局或者组件内部定义,如果想要在其他文件导出一个公共样式,导出公共使用,ArtTS是不支持的,这种方式还是需要考虑组件复用。
在开发过程中会出现大量代码在进行重复样式设置,@Styles 可以帮我们进行样式复用。
通用属性通用事件:
(1)在Styles修饰的函数中能够点出来就是通用属性和事件。
(2)Styles修饰的函数不允许传参数。
当前 @Styles 仅支持通用属性 和通用事件。
(1)全局Styles不支持箭头函数语法。
(2)支持
全局定义和
组件内定义,同时存在组件内覆盖全局生效。
代码如下:
运行效果:
5.样式-@Extends 复用
假设我们就想针对 Text进行字体和样式的复用,此时可以使用Extend来修饰一个全局的方法。
· 使用 @Extend 装饰器修饰的函数只能是
全局
· 函数可以进行
传参,如果参数是状态变量,状态更新后会刷新UI
· 且参数可以是一个函数,实现复用事件且可处理不同逻辑
需求:把 Text 改成按钮样式,且绑定 click 事件执行不同逻辑
代码如下:
运行效果:
6.多态样式-stateStyles
@Styles和@Extend仅仅应用于静态页面的样式复用,stateStyles可以依据组件的内部状态的不同,快速设置不同样式。这就是我们本章要介绍的内容stateStyles(又称为:多态样式)。
ArkUI 提供以下四种状态:
· focused:获焦态
· normal:正常态
· pressed:按压态
· disabled:不可用态
准备一个扩展样式。
运行效果:
我们想要在按压Text的时候给它一个扩大两倍的效果。
代码如下:
运行效果:
目前版本的编辑工具里不能设置通用属性之外的样式,比如fontColor 和TextAlign不可设置-会有异常。
禁用状态样式
获焦状态
(1)获焦状态最好使用TextInput来测试
(2)坑点- 要同时设置TextInput的normal和focus属性
总体代码如下:
运行效果:
