鸿蒙一次开发,多端部署(十二)资源使用

在页面开发过程中,经常需要用到颜色、字体、间距、图片等资源,在不同的设备或配置中,这些资源的值可能不同。有两种方式处理:

  • 应用资源:借助资源文件能力,开发者在应用中自定义资源,自行管理这些资源在不同的设备或配置中的表现。

  • 系统资源:开发者直接使用系统预置的资源定义(即分层参数)。

应用资源

资源文件介绍

应用开发中使用的各类自定义资源文件,需要统一存放于应用的resources目录下,便于使用和维护。resources目录包括两大类目录,一类为base目录与限定词目录,另一类为rawfile目录,其基础目录结构如下所示。

resources
|---base  // 默认存在的目录
|   |---element
|   |   |---string.json
|   |---media
|   |   |---icon.png
|---en_GB-vertical-car-mdpi // 限定词目录示例,需要开发者自行创建   
|   |---element
|   |   |---string.json
|   |---media
|   |   |---icon.png
|---rawfile  // rawfile目录

base目录默认存在,而限定词目录需要开发者自行创建,其名称可以由一个或多个表征应用场景或设备特征的限定词组合而成。应用使用某资源时,系统会根据当前设备状态优先从相匹配的限定词目录中寻找该资源。只有当resources目录中没有与设备状态匹配的限定词目录,或者在限定词目录中找不到该资源时,才会去base目录中查找。rawfile是原始文件目录,它不会根据设备状态去匹配不同的资源,故不在本文的讨论范文内。

说明:

  • 请访问 声明式开发范式资源文件分类,了解限定词目录的命名规则、创建流程、匹配规则等,本文不展开介绍。
  • 没有设备状态匹配的限定词目录,或者在限定词目录中找不到目标资源时,会继续在base目录中查找。强烈建议对于所有应用自定义资源都在base目录中定义默认值,防止出现找不到资源值的异常场景。
  • 类Web开发范式的资源文件路径及资源限定词的使用与声明式范式不同,详情请参考 类Web开发范式资源限定与访问 及 类Web开发范式文件组织 。

base目录与限定词目录下面可以创建资源组目录(包括element、media等),用于存放特定类型的资源文件。

在element目录的各个资源文件中,以“name-value”的形式定义资源,如下所示。而在media目录中,直接以文件名作为name,故开发者将文件放入media目录即可,无需再额外定义name。

// color.json 
{"color": [{"name": "color_red","value": "#ffff0000"},{"name": "color_blue","value": "#ff0000ff"}]
}

访问应用资源

在工程中,通过 “$r(‘app.type.name’)” 的形式引用应用资源。app代表是应用内resources目录中定义的资源;type 代表资源类型(或资源的存放位置),可以取 color、float、string、plural和media,name代表资源命名,由开发者添加资源时确定。

说明: 可以查看 声明式范式访问应用资源 ,了解资源访问的更多细节。

示例

在应用的resources目录下,创建名为tablet的限定词子目录,并按照下表所示,在base目录和tablet限定词目录中添加相应的资源。

在代码中通过 “$r(‘app.type.name’)” 的形式使用应用资源,并分别在默认设备和平板上查看代码的运行效果,可以发现同一资源在不同设备上的取值不同。

@Entry
@Component
struct Index {build() {Flex({ direction: FlexDirection.Column, alignItems: ItemAlign.Center, justifyContent: FlexAlign.Center }) {Text($r("app.string.my_string")).fontSize($r("app.float.my_float")).fontColor($r("app.color.my_color"))Image($r("app.media.my_image")).width(100).height(100)}.width('100%').height('100%')}
}

系统资源

除了自定义资源,开发者也可以使用系统中预定义的资源(即 分层参数,同一资源ID在设备类型、深浅色等不同配置下有不同的取值)。

在开发过程中,分层参数的用法与资源限定词基本一致。开发者可以通过"$r(‘sys.type.resource_id’)"的形式引用系统资源。sys代表是系统资源;type代表资源类型,值可以取color、float、string和media;resource_id代表资源id。

可以查看 应用UX设计中关于资源的介绍,获取系统支持的资源ID及其在不同配置下的取值。

说明:

  • 仅声明式开发范式支持使用分层参数,类Web开发范式不支持。
  • 系统资源可以保证不同团队开发出的应用有较为一致的视觉风格。对于系统预置应用,强烈建议使用系统资源;对于三方应用,可以根据需要选择使用系统资源或自定义应用资源。
  • 可以查看 resources代码仓 了解系统预置资源的实现,这里的目录结构与工程中的resources目录类似,也是通过资源限定词匹配不同的设备或设备状态。

为了能让大家更好的学习鸿蒙(HarmonyOS NEXT)开发技术,这边特意整理了《鸿蒙开发学习手册》(共计890页),希望对大家有所帮助:https://qr21.cn/FV7h05

《鸿蒙开发学习手册》:

如何快速入门:https://qr21.cn/FV7h05

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

开发基础知识:https://qr21.cn/FV7h05

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

基于ArkTS 开发:https://qr21.cn/FV7h05

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

鸿蒙开发面试真题(含参考答案):https://qr18.cn/F781PH

鸿蒙开发面试大盘集篇(共计319页):https://qr18.cn/F781PH

1.项目开发必备面试题
2.性能优化方向
3.架构方向
4.鸿蒙开发系统底层方向
5.鸿蒙音视频开发方向
6.鸿蒙车载开发方向
7.鸿蒙南向开发方向

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/766405.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

【LeetCode: 120. 三角形最小路径和 + 动态规划】

🚀 算法题 🚀 🌲 算法刷题专栏 | 面试必备算法 | 面试高频算法 🍀 🌲 越难的东西,越要努力坚持,因为它具有很高的价值,算法就是这样✨ 🌲 作者简介:硕风和炜,…

Zero-Change Object Transmission for Distributed Big Data Analytics——论文泛读

ATC 2022 Paper 问题 分布式大数据分析在很大程度上依赖于Java和Scala等高级语言的可靠性和多功能性。然而,这些高级语言也为数据传输制造了障碍。要在Java虚拟机(JVM)之间传输数据,发送方应将对象转换为字节数组(序…

nvidia显卡如何安装cuda驱动

目录 查看显卡对应的cuda版本下载与你显卡匹配的CUDA Toolkit 查看显卡对应的cuda版本 按 微软 R 键,输入cmd 然后输入 nvidia-smi ,回车显示下面信息: 看到 CUDA Version 为 12.2 下载与你显卡匹配的CUDA Toolkit 打开网页&#xff1a…

iOS UIFont-新增第三方字体

背景 在项目中添加三方字体,是在开发中比较常见的需求,每次新增字体,都会遗忘其中某个步骤,又要去百度一下才能把字体添加使用成功。每次这样有点浪费时间和打击自信,于是便想着,自己好好来理一理新增字体…

谈谈MySQL的索引

索引其实是MySQL里面的内容,而且我感觉是很高频的。我看了好多关于索引的文章,但是总感觉很困惑,虽然我之前在面试的时候没有被问过,但是我总感觉这很重要。而且,我希望将这个知识点有条理、有逻辑的说出来&#xff0c…

Cmake和opencv环境安装

1 Cmake下载及安装 Download CMake 根据需要下载,历史版本下载方法如下 CMake 的版本号中的后缀 "rc1" 和 "rc2" 表示 Release Candidate 1 和 Release Candidate 2,它们都是候选版本,用于测试新功能和修复 bug。通常情…

突破编程_C++_C++11新特性(type_traits的属性类型特性以及操作类型特性)

1 type_traits 的属性类型特性 1.1 std::alignment_of std::alignment_of 是一个模板类&#xff0c;用于获取类型的对齐要求。对齐是指数据在内存中的位置&#xff0c;某些硬件平台可能要求特定类型的数据位于特定地址的边界上。 定义&#xff1a; template< class T &g…

Github 2024-03-23 Rust开源项目日报 Top10

根据Github Trendings的统计,今日(2024-03-23统计)共有10个项目上榜。根据开发语言中项目的数量,汇总情况如下: 开发语言项目数量Rust项目10Dart项目1RustDesk: 用Rust编写的开源远程桌面软件 创建周期:1218 天开发语言:Rust, Dart协议类型:GNU Affero General Public Li…

在离线的arm架构kylin v10服务器上使用Kuboard-Spray搭建K8S集群

在离线的arm架构kylin v10服务器上使用Kuboard-Spray搭建K8S集群 在内网项目中需要安装K8S集群&#xff0c;经过调研&#xff0c;选择使用Kuboard-Spray工具搭建K8S集群&#xff0c;降低学习成本&#xff0c;提高安装效率。 为了简化安装使用集群的过程&#xff0c;搭建了私有…

云计算 3月18号 (mysql安装及操作)

一、Mysql 1.1 MySQL数据库介绍 1.1.1 什么是数据库DB&#xff1f; DB的全称是database&#xff0c;即数据库的意思。数据库实际上就是一个文件集合&#xff0c;是一个存储数据的仓库&#xff0c;数据库是按照特定的格式把数据存储起来&#xff0c;用户可以对存储的数据进行…

Docker 容器中使用 RAM 角色实现云监控事件监控

准备工作 在开始之前,请确保您已经完成以下准备工作: 创建一个 RAM 角色,并为该角色授予 ​​AliyunCloudMonitorFullAccess​​ 权限。这将允许该角色执行云监控服务的所有操作,包括发送自定义事件。准备一个 Python 应用程序,用于发送自定义事件到云监控服务。您可以使用我们…

jupyter notebook和jupyter lab 找不到虚拟环境

文章目录 这里以环境Pytorch为例&#xff1a; 激活环境 conda activate Pytorch在你的环境中安装 ipykernel&#xff1a; conda install ipykernel将你的环境添加到 Jupyter 的内核列表中&#xff1a; python -m ipykernel install --user --namePytorch

spring boot高级运用:使用Spring Kafka集成Apache Kafka,实现消息的生产和消费。

使用Spring Kafka集成Apache Kafka&#xff0c;实现消息的生产和消费。 要使用Spring Kafka集成Apache Kafka来实现消息的生产和消费&#xff0c;您需要进行以下步骤&#xff1a; 添加Spring Kafka依赖&#xff1a; 在您的Spring Boot项目中&#xff0c;首先需要添加Spring …

Java面试题:结合设计模式与并发工具包实现高效缓存;多线程与内存管理优化实践;并发框架与设计模式在复杂系统中的应用

探索Java高级编程&#xff1a;综合性面试题解析 Java作为一门功能强大的编程语言&#xff0c;在企业级应用开发中占据着举足轻重的地位。本文将深入探讨Java设计模式、内存管理、多线程工具类、并发工具包和并发框架等高级知识点&#xff0c;通过三道综合性的面试题&#xff0…

Python 从0开始 一步步基于Django创建项目(4)应用Django shell查看数据模型

Django shell是Django提供的交互式环境&#xff0c;可以通过编程的方式查看数据模型中的数据。 在《Python 从0开始 一步步基于Django创建项目&#xff08;3&#xff09;》中已经向数据模型city&#xff0c;添加了两条数据&#xff1a;‘北京’、‘墨尔本’。又向数据模型entr…

2、事件修饰符、双向绑定、style样式使用、v-for循环遍历、v-if 和 v-show

一、事件修饰符 1、.stop 阻止冒泡事件 给谁加了阻止冒泡事件&#xff0c;谁下面的盒子就不会执行了 <div id"app"><div class"parent" click"log3"><div class"child" click"log2"><button click.…

AI:151-使用机器学习技术进行信用风险评估与管理

收录于专栏:精通AI实战千例专栏合集 从基础到实践,深入学习。无论你是初学者还是经验丰富的老手,对于本专栏案例和项目实践都有参考学习意义。 ✨✨✨ 每一个案例都附带关键代码,详细讲解供大家学习,希望可以帮到大家。正在不断更新中~ 一.机器学习在信用风险评估与管理中…

python蓝桥杯-算法训练 印章、拿金币、数字游戏

一、印章 问题描述 共有n种图案的印章&#xff0c;每种图案的出现概率相同。小A买了m张印章&#xff0c;求小A集齐n种印章的概率。 输入格式 一行两个正整数n和m 输出格式 一个实数P表示答案&#xff0c;保留4位小数。 样例输入 2 3 样例输出 0.7500 数据规模和约定 1≤…

pytest之yaml格式测试用例读写封装

pytest之yaml格式测试用例读写封装 pytest之parametrize&#xff08;&#xff09;实现数据驱动YAML格式测试用例读/写/清除/封装结构类型Maps类型数组类型 pytestparametrizeyamltest_api.pyget_token.yaml pytest之parametrize&#xff08;&#xff09;实现数据驱动 pytest.ma…

LeetCode_32_困难_最长有效括号

文章目录 1. 题目2. 思路及代码实现详解&#xff08;Java&#xff09;2.1 动态规划2.2 不需要额外空间的算法 1. 题目 给你一个只包含 ( 和 ) 的字符串&#xff0c;找出最长有效&#xff08;格式正确且连续&#xff09;括号 子串 的长度。 示例 1&#xff1a; 输入&#xff…