HarmonyOS 鸿蒙Next resourceManager.getStringSync()不支持充填$r函数中参数吗?

发布于 1周前 作者 phonegap100 最后一次编辑是 5天前 来自 鸿蒙OS

HarmonyOS 鸿蒙Next resourceManager.getStringSync()不支持充填$r函数中参数吗?

string.json

假设string.json中有格式字符串format_text

{
“name”: “format_text”,
“value”: “%s(%s)”
} 

代码

代码中通过resourceManager.getStringSync尝试获取字符串,并在$r函数中充填了参数’aaa’和’bbb’

let a = getContext(this).resourceManager.getStringSync(
$r(‘app.string.format_text’, ‘aaa’, ‘bbb’)
);
Logger.d(“test”, a); 

执行日志

日志结果可以看到,aaa和bbb并未成功充填,还是返回了格式字符的原文

16:22:13.287   A0FF00/test                  D     %s(%s) 

请问这个有改善方案吗?目前似乎未找到从string.json中获取string对象且进行格式化赋值的有效方案。

2 回复
将对应参数填写在getStringSync()方法的剩余参数中

let a = getContext(this).resourceManager.getStringSync(

$r('app.string.format_text'), 'aaa', 'bbb' // 不是填在$r()的参数中

);

参考文档:https://developer.huawei.com/consumer/cn/doc/harmonyos-references-V5/js-apis-resource-manager-V5

在HarmonyOS鸿蒙系统中,resourceManager.getStringSync() 方法通常用于同步获取资源文件中的字符串。关于你提到的 $r 函数中参数的支持问题,需要明确的是,$r 函数通常用于资源引用,特别是在XML布局文件或某些特定上下文中动态解析资源。

在代码层面,resourceManager.getStringSync() 是直接调用资源ID来获取字符串值的,它并不直接支持 $r 这种资源引用格式的解析。如果你在代码中尝试将 $r 格式的资源引用传递给 getStringSync(),这通常是不会被正确解析的,因为该方法期望的是一个资源ID而不是一个字符串格式的资源引用。

正确的做法应该是先通过资源管理工具(如 ResourceTable)获取到具体的资源ID,然后再调用 getStringSync() 方法。例如:

String myString = resourceManager.getStringSync(ResourceTable.String_my_string_id);

其中 ResourceTable.String_my_string_id 是资源文件中定义的字符串资源的ID。

如果问题依旧没法解决请联系官网客服,官网地址是:https://www.itying.com/category-93-b0.html。

回到顶部