本文介绍在鸿蒙应用开发过程中字符串资源的使用方法。
StringResource
定义字符串资源
到到这篇文章之前,我们的所有字符串都是直接在代码中或者是嗯布局文件中直接使用的。这种方法虽然简单明快,但是如果我们需要修改这些字符串的时候,就需要在各处寻找定义的字符串并且修改它们。另外一个问题是,如果我们在不同的地方,希望使用同一个字符串,这种分别定义和使用的方式就无法满足需求。通过资源文件定义字符串可以解决这个问题。具体定义的方法参考下面string.json文件中的代码。:
{
"string": [
{
"name": "app_name",
"value": "HelloHarmony"
},
{
"name": "mainability_description",
"value": "Java_Phone_Empty Feature Ability"
},
{
"name": "hello_message",
"value": "你好,鸿蒙!!!"
}
]
}
开发者可以通过指定name和value两个属性任意定义自己的字符串资源。接下来我们将会以布局文件和代码两种方式来使用这个字符串资源。
在布局中使用字符串资源
下面的定义是布局文件的一部分,他在为text文本指定内容的时候,没有直接使用字符串,而是指定了字符串的ID。
<Text
ohos:id="$+id:text_hello"
ohos:height="match_content"
ohos:width="match_content"
ohos:layout_alignment="horizontal_center"
ohos:background_element="$graphic:background_ability_text"
ohos:text="$string:hello_message"
ohos:text_size="100"
/>
具体的格式是:$string:加上字符串资源文件中定义字符资源时(string.json第12行)使用的name属性。
在代码中使用字符串资源
下面是在Slice类中使用字符串资源的例子。
Text hello = (Text)findComponentById(ResourceTable.Id_text_hello);
hello.setClickedListener(new Component.ClickedListener() {
public void onClick(Component component) {
try {
ohos.global.resource.ResourceManager resManager = getContext().getResourceManager();
String hello_msg = resManager.getElement(ResourceTable.String_hello_message).getString();
new ToastDialog(getContext())
.setText(hello_msg)
.setAlignment(LayoutAlignment.BOTTOM)
.show();
} catch (IOException | NotExistException | WrongTypeException e) {
e.printStackTrace();
}
}
});
代码第5行首先通过Slice类的getContext的方法获取资源管理器ResourceManager。如果是在ability类中使用字符串资源,需要使用Ability类的getAbilityContext方法获取资源管理器。接下来使用字符串资源的ID为参数调用与ResourceManager的getElement的方法获取字符串资源之后将其转换为字符串对象即可。注意代码中使用字符串资源时ID的记法。