鸿蒙HarmonyOS学习笔记(8)

如何实现ArkUI组件字符串变量拼接

问题现象

例如:Text()组件的字符串变量拼接功能,如何实现?

TypeScript 复制代码
Text($r('app.string.EntryAbility_desc', 'Hello'))

解决措施

可以通过资源文件结合%d、%s的方式进行实现。

示例如下所示:

修改"src/main/resources/zh_CN/element/string.json"文件,对其中的一个需要变量拼接内容增加%d拼接。

TypeScript 复制代码
{ 
  "string": [ 
    { 
      "name": "module_desc", 
      "value": "模块描述%d" 
    }, 
    { 
      "name": "EntryAbility_desc", 
      "value": "description" 
    }, 
    { 
      "name": "EntryAbility_label", 
      "value": "label" 
    } 
  ] 
}

修改"src/main/resources/en_US/element/string.json"文件,对其中的一个需要变量拼接内容增加%d拼接。

TypeScript 复制代码
{ 
  "string": [ 
    { 
      "name": "module_desc", 
      "value": "module description%d" 
    }, 
    { 
      "name": "EntryAbility_desc", 
      "value": "description%d" 
    }, 
    { 
      "name": "EntryAbility_label", 
      "value": "label" 
    } 
  ] 
}

在页面组件中使用$r(xx)加上拼接变量进行使用。

TypeScript 复制代码
@Entry 
@Component 
struct Page1 { 
  @State num1: number = 100; 
 
  build() { 
    Row() { 
      Column() { 
        Text($r('app.string.module_desc', this.num1)) 
          .fontSize(50) 
          .fontWeight(FontWeight.Bold) 
      } 
      .width('100%') 
    } 
    .height('100%') 
  } 
}

切换中英文语言时,会自动跟随语言的切换带入对应的变量信息。

单HAP包应用资源

通过"r"或"rawfile"访问资源。

对于"color"、"float"、"string"、"plural"、"media"、"profile"等类型的资源,通过"$r('app.type.name')"形式访问。其中,app为resources目录中定义的资源;type为资源类型或资源的存放位置;name为资源名,开发者定义资源时确定。

对于string.json中使用多个占位符的情况,通过$r('app.string.label','aaa','bbb',444)形式访问。

对于rawfile目录资源,通过"$rawfile('filename')"形式访问。其中,filename为rawfile目录下文件的相对路径,文件名需要包含后缀,路径开头不可以"/"开头。

资源组目录下的"资源文件示例"显示了.json文件内容,包含color.json文件、string.json文件和plural.json文件,访问应用资源时需先了解.json文件的使用规范。

资源的具体使用方法如下:

TypeScript 复制代码
  //通过$r('app.type.name')访问
  Text($r('app.string.string_hello'))
  .fontColor($r('app.color.ohos_id_color_emphasize'))
  .fontSize($r('app.float.ohos_id_text_size_headline1'))
  .fontFamily($r('app.string.ohos_id_text_font_family_medium'))
  .backgroundColor($r('app.color.ohos_id_color_palette_aux1'))

  Image($r('app.media.ohos_app_icon'))
  .border({
    color: $r('app.color.ohos_id_color_palette_aux1'),
    radius: $r('app.float.ohos_id_corner_radius_button'), width: 2
  })
  .margin({
    top: $r('app.float.ohos_id_elements_margin_horizontal_m'),
    bottom: $r('app.float.ohos_id_elements_margin_horizontal_l')
  })
  .height(200)
  .width(300)

  //对占位符,通过$r('app.string.label','aaa','bbb',444)访问
  Text($r('app.string.message_notification','LiHua',2))
通过本应用上下文获取ResourceManager后,调用不同资源管理接口访问不同资源。

例如:getContext().resourceManager.getStringByNameSync('test') 可获取字符串资源;getContext().resourceManager.getRawFd('rawfilepath') 可获取Rawfile所在hap包的descriptor信息,访问rawfile文件时需{fd, offset, length}一起使用。

相关推荐
小猪佩奇TONY25 分钟前
OpenGL-ES 学习(16) ----Pixel Buffer Object
服务器·学习·elasticsearch
石像鬼₧魂石36 分钟前
有哪些常见的字典可以用于Hydra的密码破解?
linux·学习·ssh
执笔论英雄1 小时前
【大模型训练】deepseek MTPpp阶段的输入数据哪里来
学习
chenzhou__2 小时前
LinuxC语言并发程序笔记(第二十天)
linux·c语言·笔记·学习
立志成为大牛的小牛2 小时前
数据结构——四十九、B树的删除与插入
数据结构·学习·程序人生·考研·算法
北顾南栀倾寒3 小时前
[杂学笔记]C++编译过程、静态链接库与动态链接库的区别、动态多态的实现机制、虚拟地址空间分布与C++内存分布、volatile的作用以及使用场景
笔记
理人综艺好会4 小时前
redis学习之基础数据结构
数据结构·redis·学习
星轨初途4 小时前
数据结构二叉树之链式结构(3)(下)
c语言·网络·数据结构·经验分享·笔记·后端
智者知已应修善业6 小时前
【51单片机LED贪吃蛇】2023-3-27
c语言·c++·经验分享·笔记·嵌入式硬件·51单片机
charlie1145141919 小时前
从 0 开始:在 WSL + VSCode 上利用 Maven 构建 Java Spring Boot 工程
java·笔记·vscode·后端·学习·maven·springboot