首页 > 其他分享 >自学鸿蒙应用开发(22)- 定义和使用字符串资源

自学鸿蒙应用开发(22)- 定义和使用字符串资源

时间:2022-12-18 20:09:20浏览次数:47  
标签:22 鸿蒙 text ohos 字符串 自学 hello 资源 name


本文介绍在鸿蒙应用开发过程中字符串资源的使用方法。


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的记法。

自学鸿蒙应用开发(22)- 定义和使用字符串资源_资源


标签:22,鸿蒙,text,ohos,字符串,自学,hello,资源,name
From: https://blog.51cto.com/oothinking/5951055

相关文章

  • 自学鸿蒙应用开发(19)- 输出日志
    本文介绍在鸿蒙应用开发过程中日志的使用方法。HiLog日志输出代码开发者可以在Java代码中使用日志输出必要的信息。例如为了监视Slice的生成和销毁,我们增加如代码中所示......
  • Codeforces Polynomial Round 2022 (Div.1 + Div.2) CF 1774 题解
    A.AddPlusMinusSign如果有偶数个1,显然可以通过加减各一半的方式达到和为0;否则可以达到和为1。需要注意如果序列的第一个数是1,则它的前面只能填加号。时间复杂度\(O(n......
  • Codeforces Polynomial Round 2022 (Div.1 + Div.2) CF 1774 题解
    A.AddPlusMinusSign如果有偶数个1,显然可以通过加减各一半的方式达到和为0;否则可以达到和为1。需要注意如果序列的第一个数是1,则它的前面只能填加号。时间复杂度\(O(n......
  • Codeforces Polynomial Round 2022 (Div.1 + Div.2) CF 1774 题解
    A.AddPlusMinusSign如果有偶数个1,显然可以通过加减各一半的方式达到和为0;否则可以达到和为1。需要注意如果序列的第一个数是1,则它的前面只能填加号。时间复杂度\(O(n......
  • Codeforces Polynomial Round 2022 (Div.1 + Div.2) CF 1774 题解
    A.AddPlusMinusSign如果有偶数个1,显然可以通过加减各一半的方式达到和为0;否则可以达到和为1。需要注意如果序列的第一个数是1,则它的前面只能填加号。时间复杂度\(O(n......
  • ICPC2022南京站游记
    第二次打南京了,去年是在南京拿的第一块铜(上海太卷了打了次铁)Day0南京站的热身赛真就万年不变,一直用那套袋鼠题。Day1开局我直接先敲板子,试图跟榜秒杀签到题,不久后\(I\)......
  • [CSP-S 2022] 假期计划 题解
    题面题面冗长,不便展示,详见洛谷。考场想法对于每一个点给他能到达的点都建一条边,最后跑一遍DFS。期望分数:\(60\)。代码朴素想法枚举所有可能的四个点,看是否能“互......
  • 2022全国高校计算机能力挑战赛区域赛python组编程题
    互联网的意义在于高质量的共享编程题1.快递行业的兴起慢慢的改变了人们的生活方式,越来越多的人选择了快递的方式。列表LA和列表LB中分别存放了一位快递小哥今年9月份每......
  • 20221325 实验七-实验报告
    一、实验简介缓冲区溢出是指程序试图向缓冲区写入超出预分配固定长度数据的情况。这一漏洞可以被恶意用户利用来改变程序的流控制,甚至执行代码的任意片段。这一漏洞的出现......
  • ICPC2022杭州站(补题)
    A-ModuloRuinstheLegend#include<bits/stdc++.h>#definelllonglongusingnamespacestd;lln,m,sum,n1,n2;llGcd(lla,llb){if(!b)returna;ret......