当前位置:网站首页>OpenHarmony资源管理详解
OpenHarmony资源管理详解
2022-07-05 00:01:00 【InfoQ】
资源分类
resources
resoures
base
rawfile
base
element
media
animation
layout
graphic
profile
资源组目录
限定词目录
- 在为设备匹配对应的资源文件时,限定词目录匹配的优先级从高到低依次为:移动国家码和移动网络码 > 区域(可选组合:语言、语言_文字、语言_国家或地区、语言_文字_国家或地区)> 横竖屏 > 设备类型 > 颜色模式 > 屏幕密度。
- 如果限定词目录中包含移动国家码和移动网络码、语言、文字、横竖屏、设备类型、颜色模式限定词,则对应限定词的取值必须与当前的设备状态完全一致,该目录才能够参与设备的资源匹配。例如,限定词目录“zh_CN-car-ldpi”不能参与“en_US”设备的资源匹配。
资源访问
- 访问应用资源目录
base
目录下的资源文件会被编译成二进制文件并且给这些资源赋予唯一的 ID ,使用相应资源的时候通过资源访问符$('app.type.name')的形式,app代表是应用内resources
目录中定义的资源;type表示资源类型,可取值有color
、float
、string
、string
、media
等;name表示资源的文件名字。例如media中新加name为 Car.svg的图片,则访问该字符串资源为$r('app.media.Car')。
- 笔者在
base
目录下新建string.json
和color.json
文件,分别存放字符串和颜色,资源内容如下图所示:
- 通过$('app.type.name')访问资源的简单样例如下所示:
@Entry
@Component
struct Index {
build() {
Row() {
Column() {
Text($r('app.string.title_desc')) // 访问字符串资源
.fontSize(60).fontWeight(FontWeight.Bold)
.fontColor($r('app.color.title_color')) // 访问字体颜色
.backgroundImage($r('app.media.Car')) // 设备背景图片
Image("common/images/Car.svg").objectFit(ImageFit.Contain).height(200)
}
.width('100%')
}
.height('100%')
}
}
- 访问系统资源
- 系统资源包含
颜色
、圆角
、字体
、间距
、字符串
及图片
等,通过使用系统资源,不同的开发者可以开发出具有相同视觉风格的应用,开发者可以通过$r('sys.type.name')的形式引用系统资源,和访问应用资源不同的是使用sys代表系统资源,其它和访问应用资源规则一致。
- 访问系统资源简单样例如下所示:
@Entry
@Component
struct ResourceTest {
build() {
Column() {
Text($r('app.string.title_desc')) //**访问应用资源目录**
.fontColor($r('sys.color.ohos_fa_alert')) //**访问系统资源目录**
.fontSize($r('sys.float.ohos_id_text_size_headline3'))
.backgroundColor($r('sys.color.ohos_id_color_palette_aux1'))
Image("/common/images/Car.svg") //**自己创建的目录**
.objectFit(ImageFit.None)
.border({
color: Color.Orange,
radius: 20,
width: 12
})
.margin({
top: 50,
})
.width(200)
.height(200)
}
.padding(20)
.width("100%")
.height("100%")
}
}
Image("/common/images/Car.svg") //**自己创建的目录**
.objectFit(ImageFit.None)
.border({
color: Color.Orange,
radius: 20,
width: 12
})
.margin({
top: 50,
})
.width(200)
.height(200)
资源管理器
@ohos.resourceManager
ResourceManager
resourceManager
declare namespace resourceManager {
// 获取ResourceManager
export function getResourceManager(callback: AsyncCallback<ResourceManager>): void;
// 获取指定bundleName的ResourceManager
export function getResourceManager(bundleName: string, callback: AsyncCallback<ResourceManager>): void;
export interface ResourceManager {
// 获取字符串资源
getString(resId: number, callback: AsyncCallback<string>): void;
// 获取字符串数组资源
getStringArray(resId: number, callback: AsyncCallback<Array<string>>): void;
// 获取媒体资源
getMedia(resId: number, callback: AsyncCallback<Uint8Array>): void;
// 获取设备信息,比如当前屏幕密度,设备类型是手机还是平板等
getDeviceCapability(callback: AsyncCallback<DeviceCapability>): void;
// 获取配置信息,比如当前屏幕方向密度,当前设备语言
getConfiguration(callback: AsyncCallback<Configuration>): void;
// 释放ResourceManager资源
release();
}
}
export default resourceManager;
ResourceManager
getResourceManager()
ResourceManager
getXXX()
ResourceManager
- 引入 resourceManager
import resourceManager from '@ohos.resourceManager';
- 获取 ResourceManager
aboutToAppear() {
resourceManager.getResourceManager((error, manager) => {
// 获取manager
})
}
- 使用 ResourceManager
manager.getString(0x1000001, (innerError, data) => {
if(data) {
// 获取资源成功
} else {
console.log("error: " + JSON.stringify(innerError))
}
})
import resourceManager from '@ohos.resourceManager';
@Entry @Component struct ResourceTest {
@State text_string: string = "跟着坚果学习";
@State capability: string = "OpenHarmony";
@State configuration: string = "应用开发";
aboutToAppear() {
resourceManager.getResourceManager((error, manager) => {
manager.getString(0x1000001, (innerError, data) => {
if(data) {
this.text_string = data;
} else {
console.log("error: " + JSON.stringify(innerError));
}
})
manager.getDeviceCapability((innerError, deviceCapability) => {
if(deviceCapability) {
this.capability = JSON.stringify(deviceCapability);
}
})
manager.getConfiguration((innerError, configuration) => {
if(configuration) {
this.configuration = JSON.stringify(configuration);
}
})
})
}
build() {
Column({ }) {
Text(this.text_string) // 访问字符串资源
// 设置尺寸
.fontSize(29)
.fontColor($r('app.color.title_color')) // 访问字体颜色
Text(this.capability) // capability信息
.fontSize(40).fontWeight(FontWeight.Bold)
Text(this.configuration) // configuration信息
.fontSize(60)
}
.width('100%')
.height('100%')
.padding(10)
}
}
边栏推荐
- ECCV 2022 | Tencent Youtu proposed disco: the effect of saving small models in self supervised learning
- 取得PMP证书需要多长时间?
- 微软禁用IE浏览器后,打开IE浏览器闪退解决办法
- [JS] - [dynamic planning] - Notes
- How long does it take to obtain a PMP certificate?
- Tester's algorithm interview question - find mode
- XML的解析
- go踩坑——no required module provides package : go.mod file not found in current directory or any parent
- Go pit - no required module provides Package: go. Mod file not found in current directory or any parent
- Instructions for go defer
猜你喜欢
S32 design studio for arm 2.2 quick start
城市轨道交通站应急照明疏散指示系统设计
Consolidated expression C case simple variable operation
[paper reading] Tun det: a novel network for meridian ultra sound nodule detection
XML的解析
Build your own minecraft server with fast parsing
如何用快解析自制IoT云平台
Why does infographic help your SEO
ECCV 2022 | Tencent Youtu proposed disco: the effect of saving small models in self supervised learning
端口映射和端口转发区别是什么
随机推荐
The Chinese output of servlet server and client is garbled
Hong Kong Jewelry tycoon, 2.2 billion "bargain hunting" Giordano
22-07-02周总结
实战模拟│JWT 登录认证
模板的进阶
[IELTS reading] Wang Xiwei reading P3 (heading)
Acrel-EMS综合能效平台在校园建设的意义
IELTS examination process, what to pay attention to and how to review?
用快解析内网穿透实现零成本自建网站
Is the account opening link of Huatai Securities with low commission safe?
Pytoch --- use pytoch to realize linknet for semantic segmentation
Financial markets, asset management and investment funds
Business implementation - the log is written to the same row of data
uniapp 除了数字,其他输入无效
企业应用业务场景,功能添加和修改C#源码
PermissionError: [Errno 13] Permission denied: ‘data. csv‘
Mit-6.824-lab4b-2022 (10000 word idea explanation - code construction)
Using the uniapp rich text editor
Skills in analyzing the trend chart of London Silver
Build your own minecraft server with fast parsing