鸿蒙Next属性字符串如何使用

在鸿蒙Next开发中,如何正确使用属性字符串?
我在尝试设置文本样式时遇到困难,比如同时设置部分文字颜色、字体大小或加粗效果。官方文档提到的ResourceManager.getString()Text.TextStyle具体该怎么配合使用?能否提供一个完整的代码示例?

2 回复

鸿蒙Next(HarmonyOS NEXT)中,属性字符串(ResourceStr)用于处理带样式或动态内容的文本。使用方法如下:

  1. 定义资源:在resources/base/element/string.json中定义字符串,支持占位符:
{
  "name": "welcome_msg",
  "value": "Hello, %s! You have %d new messages."
}
  1. 引用资源
// 方式1:直接使用$r引用
let text = $r('app.string.welcome_msg')

// 方式2:通过ResourceManager获取
const context = getContext(this)
let resMgr = context.resourceManager
let text = await resMgr.getElementValue($r('app.string.welcome_msg'))
  1. 格式化占位符
// 使用Util.formatString格式化
import util from '@ohos.util'

let formatted = util.formatString(
  $r('app.string.welcome_msg'),
  "张三",  // 替换%s
  5        // 替换%d
)
  1. 在ArkUI中使用
Text(formatted)
  .fontSize(20)
  .fontColor(Color.Black)

注意:

  • 占位符支持%s(字符串)、%d(整数)、%f(浮点数)
  • 使用ResourceManager时需要处理异步
  • 可通过@State绑定实现动态更新

这样就能灵活处理多语言、动态内容的文本显示了。

更多关于鸿蒙Next属性字符串如何使用的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html


鸿蒙Next(即HarmonyOS NEXT)中,属性字符串(ResourceString)用于管理应用中的文本资源,支持多语言和动态格式化。以下是基本使用方法:

1. 定义字符串资源

resources/base/element/string.json 中定义:

{
  "string": [
    {
      "name": "greeting",
      "value": "Hello, %s!"
    },
    {
      "name": "welcome_message",
      "value": "Welcome to HarmonyOS!"
    }
  ]
}

2. 引用字符串资源

  • 在UI代码中(ArkTS)

    // 直接使用资源ID
    Text($r('app.string.greeting'))
    
    // 动态格式化(需配合字符串占位符 %s)
    let userName = "Alice";
    Text($r('app.string.greeting', userName)) // 显示 "Hello, Alice!"
    
  • 在JavaScript/TypeScript逻辑中

    import { BusinessError } from '[@ohos](/user/ohos).base';
    try {
      let str = this.context.resourceManager.getStringSync($r('app.string.welcome_message').id);
    } catch (error) {
      console.error(`getStringSync failed, error code: ${(error as BusinessError).code}`);
    }
    

3. 多语言支持

在对应语言的资源目录(如 resources/zh-CN/element/string.json)中提供翻译:

{
  "string": [
    {
      "name": "greeting",
      "value": "你好,%s!"
    }
  ]
}

关键说明:

  1. 占位符格式化:使用 %s(字符串)、%d(数字)等,通过 $r('app.string.xxx', params) 传参。
  2. 资源访问$r('app.string.xxx') 是标准资源引用方式,app 为模块名。
  3. 动态获取:在非UI代码中需通过 resourceManager API 获取字符串值。

示例场景

// 带参数的问候语
@Entry
@Component
struct Index {
  private userName: string = "HarmonyOS Developer"

  build() {
    Column() {
      Text($r('app.string.greeting', this.userName)) // 输出:Hello, HarmonyOS Developer!
        .fontSize(20)
    }
  }
}

通过以上方式,可高效管理应用文本,并适配多语言环境。

回到顶部