HarmonyOS第四章:样式操作及渲染页面

🎉 博客主页:【剑九_六千里-优快云博客】【剑九_六千里-掘金社区
🎨 上一篇文章:【HarmonyOS第三章:初识ArkTs/ArkUI,常用组件二
🎠 系列专栏:【HarmonyOS系列
💖 感谢大家点赞👍收藏⭐评论✍

在这里插入图片描述

在这里插入图片描述
引言
ArkTS,作为ArkUI框架的一个重要组成部分,提供了一套强大且灵活的工具集,旨在帮助开发者构建高性能且美观的应用程序。无论是新手还是经验丰富的开发者,掌握ArkTS中的样式操作和渲染技术都是必不可少的技能。本文将深入探讨如何利用ArkTS中的样式设置、适配单位、样式复用、多态样式以及条件渲染和循环渲染等功能,帮助您更高效地构建美观、响应迅速的应用界面。让我们一同探索这些强大的工具和技术,开启您的ArkTS之旅吧!

1. 样式操作

1.1. 样式语法

ArkTS采用声明式方法来组合和扩展组件,从而构建应用程序的用户界面。此外,它还提供了一系列基础属性、事件处理能力和子组件的配置选项,以支持开发者设计和实现应用程序的交互逻辑。

1.1.1. 样式属性

  • 属性方法可以通过点(.)进行链式调用来配置系统组件的样式和其他属性。
  • 为了提高代码的可读性,建议将每个属性方法分别写在单独的一行上。
@Entry
@Component
struct StylePage {
   
  build() {
   
    Row() {
   
      Text("测试链式调用")
        .width(100)
        .height(100)
        .backgroundColor("#f40")
    }
    .width("100%")
    .height("100%")
    .justifyContent(FlexAlign.Center)
  }
}

测试:

在这里插入图片描述

1.1.2. 枚举值

ArkUI为系统组件的属性提供了预定义的枚举类型,以简化配置过程。

@Entry
@Component
struct StylePage {
   
  build() {
   
    Row() {
   
      Text("测试样式枚举值")
        .width(200)
        .height(100)
        .backgroundColor(Color.Gray)
        .textAlign(TextAlign.Center)
        .fontWeight(FontWeight.Bold)
        .fontColor(Color.Blue)
    }
    .width("100%")
    .height("100%")
    .justifyContent(FlexAlign.Center)
  }
}

测试:

在这里插入图片描述

注意:

  • 样式相关的属性应该使用链式函数进行设置。
  • 当属性类型为枚举时,应该通过传入相应枚举值来设定。

1.2. 像素单位

Harmony为开发者提供4种像素单位,框架采用 vp 为基准数据单位。

名称 描述
px 屏幕物理像素单位。
vp 屏幕密度相关像素,根据屏幕像素密度转换为屏幕物理像素,当数值不带单位时,默认单位vp。在实际宽度为1440物理像素的屏幕上,1vp约等于3px。
fp 字体像素,与vp类似适用屏幕密度变化,随系统字体大小设置变化。
lpx 视窗逻辑像素单位,lpx单位为实际屏幕宽度与逻辑宽度(通过designWidth配置)的比值,designWidth默认值为720。当designWidth为720时,在实际宽度为1440物理像素的屏幕上,1lpx为2px大小。

1.2.1. "vp" 是指 “虚拟像素”(virtual pixel)

在设置样式时,如果使用的是 px 作为单位,它直接对应于物理像素,即屏幕的分辨率。由于不同手机的屏幕分辨率密度各异,用 px 表示的值难以适应所有屏幕密度,因此使用 vp(虚拟像素)作为单位可以自动根据手机的屏幕密度进行适配。这样,vp 提供了一种灵活的方法来确保不同屏幕密度下的显示效果保持一致。

例如,设计图如果是按照1080px宽度设计的,那么在编写样式时,可以将这个尺寸换算成360vp来适配不同的屏幕。

1.2.2. 像素单位转换

其他单位与px单位互相转换的方法。

接口 描述
vp2px(value : number) : number 将vp单位的数值转换为以px为单位的数值。从API version 9开始,该接口支持在ArkTS卡片中使用。
px2vp(value : number) : number 将px单位的数值转换为以vp为单位的数值。从API version 9开始,该接口支持在ArkTS卡片中使用。
fp2px(value : number) : number 将fp单位的数值转换为以px为单位的数值。从API version 9开始,该接口支持在ArkTS卡片中使用。
px2fp(value : number) : number 将px单位的数值转换为以fp为单位的数值。从API version 9开始,该接口支持在ArkTS卡片中使用。
lpx2px(value : number) : number 将lpx单位的数值转换为以px为单位的数值。从API version 9开始,该接口支持在ArkTS卡片中使用。
px2lpx(value : number) : number 将px单位的数值转换为以lpx为单位的数值。从API version 9开始,该接口支持在ArkTS卡片中使用。

示例:

@Entry
@Component
struct VPPage {
   
  @State pageSize: string = "";
  build() {
   
    Column() {
   
      // 预览器宽度:360vp
      Text(`屏幕宽度是${
     this.pageSize}vp`)
      // vp和px之间的转换比例是1:3
      Text(`1080px可以转换成${
     px2vp(1080)}vp`) // 将px转换成vp
      Text(`360vp可以转换成${
     vp2px(360)}px`) // 将vp转换成px
    }
    .width('100%')
    .height('100%')
    .onAreaChange((oldValue, newValue) => {
   
      // 视口发生变化时触发
      this.pageSize = newValue.width.toString();
    })
  }
}

测试:

在这里插入图片描述

1.2.3. 也可以采用伸缩布局(layoutWeight)、网格系统和栅格系统来进行布局适配。

在伸缩布局中,layoutWeight(flex: number)可以用来指定组件占据剩余空间的比例,类似于CSS中的 flex: 1 属性。这意味着组件可以根据指定的权重来分配剩余空间,以实现灵活的布局。

@Entry
@Component
struct LayoutWeight {
   
  build() {
   
    Row() {
   
      Text('left')
        .width(100)
        .height(100)
        .backgroundColor(Color.Pink)
      Text('right')
        .width(100)
        .hei
### 下载 HarmonyOS Sans SC Black 字体文件的方法 可以通过以下方法获取 `HarmonyOS_Sans_SC_Black.ttf` 文件: #### 方法一:通过 GitHub 获取 如果目标是从 GitHub 上下载该字体文件,可以尝试访问华为开源项目或其他开发者上传的相关资源。以下是具体命令实现方式: ```bash git clone https://github.com/HarmonyOS-Fonts/Sans.git && cd Sans && cp HarmonyOS_Sans_SC_Black.ttf /desired/path/ ``` 注意此链接仅为假设路径,请确认实际仓库地址是否存在并提供所需字体文件[^1]。 #### 方法二:替换为其他可用源 当无法找到官方支持的下载站点时,可考虑使用镜像服务或者第三方托管平台替代方案。例如将 `<link>` 替换为指向可靠 CDN 的样式表加载语句如下所示: ```html <link href='https://fonts.loli.net/css2?family=HarmonyOS+Sans+SC:wght@900&display=swap' rel='stylesheet'> ``` 上述代码片段会动态引入加粗版本(Black)的 HarmonyOS Sans SC 字体到网页中[^2]。 #### 方法三:手动配置本地环境下的 Matplotlib 使用自定义 TTF 文件 对于 Jupyter Notebook 用户,在 Linux 类似云端 GPU 平台上设置中文显示需完成几个步骤操作。下面展示如何添加指定黑体字形至绘图库内部目录结构下以便正常渲染输出图形中的汉字字符。 ```python !wget https://example-domain-for-harmony-os-fonts.com/ Harmon yOS _Sans_ SC _Black .ttf - O $CONDA_PREFIX /lib/python3.x/site-packages/matplotlib/mpl-data/fonts/ttf/HarmonyOS_Sans_SC_Black.ttf import matplotlib.pyplot as plt plt.rcParams['font.family']=['HarmonyOS Sans SC'] plt.rcParams['axes.unicode_minus']=False # 解决负号 '-' 显示异常问题 ``` 请调整 URL 地址匹配真实有效的分发位置[^4]。 另外值得注意的是 `_get_agg_font()` 函数负责管理字体对象缓存机制从而提升性能表现[^3] ,不过这与当前讨论主题无直接关联故不做深入探讨。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

剑九_六千里

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值