ArkUI 如何将$r(’app.string.xxx‘) 转成string字符串

一、正常引用字符串资源文件内容

ArkUI 中,string.json 中的字符串资源正常情况下使用如下方式引用:

@Entry
@Component
struct LoginPage {
   
	
  build() {
   
    Column() {
   
	  Text($r('app.string.title'))
	}
  }
  
}

二、资源转string类型

上面的代码没问题是因为 Text(content?: string | Resource) 内的参数是可以接收 string 或者 Resource 类型的

但是在某些组件的入参并不支持 Resource 类型,比如 RichText(content: string),它只接收一个不可为空的字符串类型,这个时候想使用 string.json 内的资源,就需要用到 resourceManager 了。

@Entry
@Component
struct LoginPage {
   
	
  build() {
   
    Column() {
   
	  Text($r('app.string.title'))
	  // toString() 可以省略	  
	  RichText(getContext(this).resourceManager.getStringSync($r('app.string.title')).toString())
	}
  }
  
}

三、更多 API

附上:resourceManager 官方的 API 文档

resourceManager 内相关 string 的重载函数还有很多,反正就是支持不同入参的同步、异步形式加载:

getString(resld: number, callback: AsyncCallback<string>): void
getString(resld: number): Promise<string>
getStringValue(resource: Resource, callback: _AsyncCalback<string>): void
getStringValue(resource: Resource): Promise<string>
getStringArray(resld: number, callback: AsyncCallback<Array<string>>): void
getStringArray(resld: number): Promise<Array<string>>
getStringArrayValue(resource: Resource, callback:_AsyncCallback<Array<string>>): void
getStringArrayValue(resource: Resource): Promise<Array<string>>
getStringByName(resName: string, callback: AsyncCallback<string>): void
getStringByName(resName: string): Promise<string>
getStringArrayByName(resName: string, callback:_AsyncCallback<Array<string>>): void
getStringArrayByName(resName: string): Promise<Array<string>>: void
getPluralStringByName(resName: string, num: number, callback: _AsyncCallback<string>): void
getPluralStringByName(resName: string, num: number): Promise<string>
getStringSync(resld: number): string
getStringSync(resource: Resource): string
getStringByNameSync(resName: string): string

图片的看起来应该更直观
在这里插入图片描述
在这里插入图片描述

四、注意

需要注意的是 getContext(this) 方法,除了在 Abliity 里可以自由调用,并不能在正常的容器组件内的代码块里调用,通常只能在上面这种函数入参或者 onClick 这种事件的箭头函数的代码块里才能调用,举个栗子:

// 错误方式,会静态检查报错
let ctx = getContext(this)

// 正确方式 1
Button(getContext(this).resourceManager.getStringSync(0x11).toString())

// 正确方式 2
Button('登录').onClick((e) => {
   
  let ctx = getContext(this)
})

// 其他场景暂时还没研究过

以上就是本文的全部内容,感兴趣可以关注专栏,会持续更新…

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2023-12-05 23:20:03       94 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2023-12-05 23:20:03       101 阅读
  3. 在Django里面运行非项目文件

    2023-12-05 23:20:03       82 阅读
  4. Python语言-面向对象

    2023-12-05 23:20:03       91 阅读

热门阅读

  1. Golang WebSocket 心跳

    2023-12-05 23:20:03       58 阅读
  2. 在Spring Boot中配置@Async的线程池的拒绝策略

    2023-12-05 23:20:03       56 阅读
  3. Spring Boot 最核心的 25 个注解

    2023-12-05 23:20:03       49 阅读
  4. Cpp之旅(学习笔记)第10章 字符串和正则表达式

    2023-12-05 23:20:03       47 阅读
  5. 说说过量 tcp pure ack 的利弊

    2023-12-05 23:20:03       55 阅读
  6. React 基础使用

    2023-12-05 23:20:03       57 阅读
  7. ElasticSearch之Delete index API

    2023-12-05 23:20:03       67 阅读
  8. SpringBoot学习笔记-实现微服务:匹配系统(中)

    2023-12-05 23:20:03       49 阅读
  9. Python【匹配符号】

    2023-12-05 23:20:03       54 阅读
  10. 深入了解HttpSession:Web开发中的用户状态管理

    2023-12-05 23:20:03       51 阅读
  11. Vue3的reactive、ref、toRef、toRefs用法以及区别

    2023-12-05 23:20:03       56 阅读
  12. SQL语句常用语法(开发场景中)

    2023-12-05 23:20:03       42 阅读
  13. 数据结构:链表应用:第8关:链表的逆转

    2023-12-05 23:20:03       55 阅读
  14. 【.NET Core】Linq查询运算符(一)

    2023-12-05 23:20:03       39 阅读