鸿蒙ArkUI声明式学习:【UI资源管理】

这篇具有很好参考价值的文章主要介绍了鸿蒙ArkUI声明式学习:【UI资源管理】。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

OpenHarmony 应用的资源分类和资源的访问以及应用开发使用的像素单位以及各单位之间相互转换的方法。

资源分类

移动端应用开发常用到的资源比如图片,音视频,字符串等都有固定的存放目录,OpenHarmony 把这些应用的资源文件统一放在 resources 目录下的各子目录中便于开发者使用和维护, resoures 目录包括两大类,一类为 base 目录与限定词目录,另一类为 rawfile 目录。新建 OpenHarmony 应用,默认生成的资源目录如下所示:

鸿蒙ArkUI声明式学习:【UI资源管理】,鸿蒙开发,harmonyos,openharmony,鸿蒙开发,鸿蒙,ArkUI,移动开发,程序员

base 目录与限定词目录下面可以创建资源组目录(包括 element 、 media 、animation 、 layout 、 graphic 、 profile ),用于存放特定类型的资源文件,各资源目录说明如下图所示:

鸿蒙ArkUI声明式学习:【UI资源管理】,鸿蒙开发,harmonyos,openharmony,鸿蒙开发,鸿蒙,ArkUI,移动开发,程序员

鸿蒙OS开发 更多内容↓点击 HarmonyOS与OpenHarmony技术
鸿蒙技术文档 开发知识更新库gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md在这。

鸿蒙ArkUI声明式学习:【UI资源管理】,鸿蒙开发,harmonyos,openharmony,鸿蒙开发,鸿蒙,ArkUI,移动开发,程序员

资源访问

如果失效请添加mau123789是v直接拿取鸿蒙学习文档

OpenHarmony 应用资源分为两类,一类是应用资源,另一类是系统资源,它们的资源访问方式如下:

  • 访问应用资源

    base 目录下的资源文件会被编译成二进制文件并且给这些资源赋予唯一的 ID ,使用相应资源的时候通过资源访问符  r ( ′ a p p . t y p e . n a m e ′ ) ∗ ∗  的形式, ∗ ∗ a p p ∗ ∗  代表是应用内  ‘ r e s o u r c e s ‘  目录中定义的资源; ∗ ∗ t y p e ∗ ∗  表示资源类型,可取值有  ‘ c o l o r ‘  、  ‘ f l o a t ‘  、  ‘ s t r i n g ‘  、  ‘ s t r i n g ‘  、  ‘ m e d i a ‘  等; ∗ ∗ n a m e ∗ ∗  表示资源的文件名字。例如  ∗ ∗ s t r i n g . j s o n ∗ ∗  中新加  ∗ ∗ n a m e ∗ ∗  为  ∗ ∗ t e x t s t r i n g ∗ ∗  的字符串,则访问该字符串资源为  ∗ ∗ r('app.type.name')**  的形式,**app** 代表是应用内 `resources` 目录中定义的资源;**type** 表示资源类型,可取值有 `color` 、 `float` 、 `string` 、 `string` 、 `media` 等;**name** 表示资源的文件名字。例如 **string.json** 中新加 **name** 为 **text_string** 的字符串,则访问该字符串资源为  ** r(app.type.name) 的形式,app 代表是应用内 ‘resources‘ 目录中定义的资源;type 表示资源类型,可取值有 ‘color‘  ‘float‘  ‘string‘  ‘string‘  ‘media‘ 等;name 表示资源的文件名字。例如 string.json 中新加 name  textstring 的字符串,则访问该字符串资源为 r(‘app.string.text_string’)

    笔者在 base 目录下新建 float.json 和 color.json 文件,分别存放字体和颜色,资源内容如下图所示:

    鸿蒙ArkUI声明式学习:【UI资源管理】,鸿蒙开发,harmonyos,openharmony,鸿蒙开发,鸿蒙,ArkUI,移动开发,程序员

    通过  $(‘app.type.name’)  访问资源的简单样例如下所示:

    @Entry @Component struct ResourceTest {
      build() {
        Column({space: 10}) {
          Text($r('app.string.text_string'))                       // 访问字符串资源
            .size({width: 300, height: 120})                       // 设置尺寸
            .fontSize($r('app.float.text_size'))                   // 访问字体大小
            .fontColor($r('app.color.text_color'))                 // 访问字体颜色
            .backgroundImage($r('app.media.test'), ImageRepeat.XY) // 设备背景图片
        }
        .width('100%')
        .height('100%')
        .padding(10)
      }
    }
    

    样例运行结果如下图所示:

    鸿蒙ArkUI声明式学习:【UI资源管理】,鸿蒙开发,harmonyos,openharmony,鸿蒙开发,鸿蒙,ArkUI,移动开发,程序员

  • 访问系统资源

    系统资源包含 颜色 、 圆角 、 字体 、 间距 、 字符串 及 图片 等,通过使用系统资源,不同的开发者可以开发出具有相同视觉风格的应用,开发者可以通过  $r(‘sys.type.name’)  的形式引用系统资源,和访问应用资源不同的是使用 sys 代表系统资源,其它和访问应用资源规则一致。

    访问系统资源简单样例如下所示:

    @Entry @Component struct ResourceTest {
      build() {
        Column() {
          Text('Hello')
            .fontColor($r('sys.color.ohos_id_color_emphasize'))
            .fontSize($r('sys.float.ohos_id_text_size_headline1'))
            .fontFamily($r('sys.string.ohos_id_text_font_family_medium'))
            .backgroundColor($r('sys.color.ohos_id_color_palette_aux1'))
          Image($r('sys.media.ohos_app_icon'))
            .border({
              color: $r('sys.color.ohos_id_color_palette_aux1'),
              radius: $r('sys.float.ohos_id_corner_radius_button'),
              width: 2
            })
            .margin({
              top: $r('sys.float.ohos_id_elements_margin_horizontal_m'),
              bottom: $r('sys.float.ohos_id_elements_margin_horizontal_l')
            })
            .height(200)
            .width(300)
        }
        .padding(10)
        .width("100%")
        .height("100%")
      }
    }
    

    样例运行结果如下图所示:

    鸿蒙ArkUI声明式学习:【UI资源管理】,鸿蒙开发,harmonyos,openharmony,鸿蒙开发,鸿蒙,ArkUI,移动开发,程序员

像素单位

ArkUI开发框架提供了 4 种像素单位供开发者使用,分别是: px 、 vp 、 fp 和 lpx ,它们之间的区别如下表所示:

名称 描述
px 屏幕物理像素单位。
vp 屏幕密度相关像素单位,根据屏幕像素密度转换为屏幕物理像素。
fp 字体像素,与vp类似适用于屏幕密度变化,随系统字体大小设置变化。
lpx 视窗逻辑像素单位,lpx单位为实际屏幕宽度与逻辑宽度(在 config.json 中配置的 designWidth )的比值,如配置 designWdith 为 720 时,在实际宽度为 1440 物理像素的屏幕上, 1px 为 2px 。

ArkUI开发框架也提供了全局方法把这些不同的尺寸单位相互转换,全局方法如下所示:

declare function vp2px(value: number): number;
declare function px2vp(value: number): number;
declare function fp2px(value: number): number;
declare function px2fp(value: number): number;
declare function lpx2px(value: number): number;
declare function px2lpx(value: number): number;
  • vp2px:将 vp 单位的数值转换为以 px 为单位的数值。
  • px2vp:将 px 单位的数值转换为以 vp 为单位的数值。
  • fp2px:将 fp 单位的数值转换为以 px 为单位的数值。
  • px2fp:将 px 单位的数值转换为以 fp 为单位的数值。
  • lpx2px:将 lpx 单位的数值转换为以 px 为单位的数值。
  • px2lpx:将 px 单位的数值转换为以 lpx 为单位的数值。

这些单位尺寸具体大小,笔者举个简单样例演示一下:

@Entry @Component struct ResourceTest {
  build() {
    Column() {
      Flex({ wrap: FlexWrap.Wrap }) {
        Column() {
          Text("width(220)")
            .width(220)
            .height(40)
            .backgroundColor(Color.Pink)
            .textAlign(TextAlign.Center)
            .fontSize('12vp')
        }.margin(5)

        Column() {
          Text("width('220px')")
            .width('220px')
            .height(40)
            .backgroundColor(Color.Pink)
            .textAlign(TextAlign.Center)
        }.margin(5)

        Column() {
          Text("width('220vp')")
            .width('220vp')
            .height(40)
            .backgroundColor(Color.Pink)
            .textAlign(TextAlign.Center)
            .fontSize('12vp')
        }.margin(5)

        Column() {
          Text("width('220lpx') designWidth:720")
            .width('220lpx')
            .height(40)
            .backgroundColor(Color.Pink)
            .textAlign(TextAlign.Center)
            .fontSize('12vp')
        }.margin(5)

        Column() {
          Text("width(vp2px(220) + 'px')")
            .width(vp2px(220) + 'px')
            .height(40)
            .backgroundColor(Color.Pink)
            .textAlign(TextAlign.Center)
            .fontSize('12vp')
        }.margin(5)

        Column() {
          Text("fontSize('12fp')")
            .width(220)
            .height(40)
            .backgroundColor(Color.Pink)
            .textAlign(TextAlign.Center)
            .fontSize('12fp')
        }.margin(5)
      }
      .width('100%')
      .height("100%")
    }
    .width('100%')
    .height("100%")
    .padding(10)
  }
}

样例运行结果如下图所示:

鸿蒙ArkUI声明式学习:【UI资源管理】,鸿蒙开发,harmonyos,openharmony,鸿蒙开发,鸿蒙,ArkUI,移动开发,程序员

资源管理器

ArkUI开发框架在 @ohos.resourceManager 模块里提供了资源管理器 ResourceManager,它可以访问不同的资源,比如获取获取字符串资源,获取设备配置信息等等,resourceManager 模块提供部分 API 如下所示:

declare namespace resourceManager {
  // 省略部分代码
  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 之前先调用 getContext(this) 方法获取当前组件的 Context,该 Conetxt 内部定义了一个 ResourceManager 的属性,因此可以直接使用 ResourceManager 的各种 getXXX() 方法获取对应资源, ResourceManager 使用流程如下所示:

  • 引入 resourceManager

    import resourceManager from '@ohos.resourceManager';
    

    1

  • 获取 ResourceManager

    aboutToAppear() {
      // 获取ResourceManager
      let manager = getContext(this).resourceManager;
    }
    
  • 使用 ResourceManager

    manager.getString(0x1000001, (innerError, data) => {
      if(data) {
        // 获取资源成功
      } else {
        console.log("error: " + JSON.stringify(innerError))
      }
    })
    
  • 释放 ResourceManager

    this.manager.release();
    

完整样例如下所示:

import resourceManager from '@ohos.resourceManager';

@Entry @Component struct ResourceTest {

  @State text_string: string = "";
  @State capability: string = "";
  @State configuration: string = "";
  
  private resManager: resourceManager.ResourceManager;

  build() {
    Column({ space: 10 }) {
      Text(this.text_string)                   // 访问字符串资源
        .size({ width: 300, height: 120 })     // 设置尺寸
        .fontSize($r('app.float.text_size'))   // 访问字体大小
        .fontColor($r('app.color.text_color')) // 访问字体颜色
        .backgroundImage($r('app.media.test')) // 设备背景图片

      Text(this.capability)                    // capability信息
        .fontSize(20)

      Text(this.configuration)                 // configuration信息
        .fontSize(20)
    }
    .width('100%')
    .height('100%')
    .padding(10)
  }

  aboutToAppear() {
    this.resManager = getContext(this).resourceManager;
    this.resManager.getStringValue(0x1000001, (innerError, data) => {
      if(data) {
        this.text_string = data;
      } else {
        console.log("error: " + JSON.stringify(innerError));
      }
    })

    this.resManager.getDeviceCapability((innerError, deviceCapability) => {
      if(deviceCapability) {
        this.capability = JSON.stringify(deviceCapability);
      }
    })

    this.resManager.getConfiguration((innerError, configuration) => {
      if(configuration) {
        this.configuration = JSON.stringify(configuration);
      }
    })
  }
  
  aboutToDisappear() {
    this.resManager?.release(); // 释放 ReleaseManager 资源
  }

}

样例运行结果如下图所示:

鸿蒙ArkUI声明式学习:【UI资源管理】,鸿蒙开发,harmonyos,openharmony,鸿蒙开发,鸿蒙,ArkUI,移动开发,程序员

渲染出来的 mock string 是因为在预览器上暂时不支持 ResourceManager 的用法,在实际设备上是没问题的。文章来源地址https://www.toymoban.com/news/detail-856403.html

到了这里,关于鸿蒙ArkUI声明式学习:【UI资源管理】的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 【k8s】5、资源管理命令-声明式

    目录 一、 yaml和json介绍 1、yuml语言介绍 2、k8s支持的文件格式 3、yaml和json的主要区别 二、声明式对象管理 1、命令式对象配置 2、声明式对象配置 3、声明式对象管理命令介绍 三、编写资源配置清单 1、 编写yaml文件 2、 启动并查看资源 3、创建service服务对外提供访问测试 4、

    2024年02月07日
    浏览(33)
  • k8s资源管理方法详解(陈述式、声明式)

    目录 一:陈述式资源管理方法 二: 基本信息查看 1、查看信息 2、创建  3、删除 4、service 的 type 类型 三:项目实例 1、创建    kubectl create命令 2、发布    kubectl expose命令  3、在 node 节点上操作,查看负载均衡端口  4、更新    kubectl set 5、 回滚    kubectl rollout  6、

    2024年02月13日
    浏览(25)
  • k8s中kubectl陈述式/声明式资源管理

    1.kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口 2.kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径 3.kubectl 的命令大全 kubectl

    2024年02月15日
    浏览(26)
  • K8S:kubectl陈述式及声明式资源管理

    (1)kubernetes 集群管理集群资源的唯一入口是通过相应的方法调用 apiserver 的接口 (2)kubectl 是官方的CLI命令行工具,用于与 apiserver 进行通信,将用户在命令行输入的命令,组织并转化为 apiserver 能识别的信息,进而实现管理 k8s 各种资源的一种有效途径 (3)kubectl 的命令大

    2024年02月09日
    浏览(34)
  • 在CSDN学Golang云原生(Kubernetes声明式资源管理Kustomize)

    在 Kubernetes 中,我们可以通过 YAML 或 JSON 文件来定义和创建各种资源对象,例如 Pod、Service、Deployment 等。下面是一个简单的 YAML 文件示例,用于创建一个 Nginx Pod: 该文件包含了以下信息: apiVersion :指定 Kubernetes API 的版本。 kind :指定资源类型,这里为 Pod。 metadata :定义

    2024年02月15日
    浏览(26)
  • Flutter学习四:Flutter开发基础(五)资源管理

    目录 0 引言 1 资源管理 1.1 指定 assets 1.2 Asset 变体(variant) 1.3 加载 assets 1.3.1  加载文本 1.3.2 加载图片 1.3.2.1 声明分辨率相关的图片 1.3.2.2 加载图片 1.3.3 依赖包中的资源图片  1.3.4 打包包中的 assets 1.3.5  特定平台 assets  1.3.5.1 设置APP图标  1.3.5.2 更新启动页 1.4 平台

    2024年02月11日
    浏览(30)
  • HarmonyOS鸿蒙开发指南:UI开发 基于ArkTS的声明式开发范式 声明式UI开发实例 页面布局与连接

    目录 构建食物数据模型 构建食物列表List布局 构建食物分类Grid布局  页面跳转与数据传递

    2024年02月03日
    浏览(43)
  • HarmonyOS鸿蒙开发指南:基于ArkTS的声明式开发范式 声明式UI开发实例 绘图与动画

    目录 绘制图形 绘制基本几何图形 绘制自定义几何图形 animateTo实现闪屏动画 页面转场动画 绘制能力主要是通过框架提供的绘制组件来支撑,支持svg标准绘制命令。 本节主要学习如何使用绘制组件,绘制详情页食物成分标签(基本几何图形)和应用Logo(自定义图形)。

    2024年01月17日
    浏览(46)
  • Unity框架学习--资源管理器

    1、Inspector窗口拖拽         在脚本中用public声明变量,然后在Inspector窗口把要加载的资源拖拽给该脚本的变量。         不建议在大型项目使用。在公司的项目也不要用。         如果你是独立游戏开发者,则可以用。         不支持热更新。 2、Resources         用Reso

    2024年02月12日
    浏览(35)
  • 鸿蒙开发笔记(一):ArkTS概述及声明式UI的使用

    ArkTS是HarmonyOS优选的主力应用开发语言。ArkTS围绕应用开发在TypeScript(简称TS)生态基础上做了进一步扩展,继承了TS的所有特性,是TS的超集。 ArkTS在TS的基础上主要扩展了如下能力: 基本语法 :ArkTS定义了声明式UI描述、自定义组件和动态扩展UI元素的能力,再配合ArkUI开发

    2024年01月17日
    浏览(38)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包