当前位置: 首页 > article >正文

鸿蒙UI开发——使用WidthTheme实现局部深浅色

1、场景描述

在实际的应用开发中,我们可能需要在界面中局部应用深色或者浅色的界面样式,与全局的深色、亮色同时生效。场景例如:深/亮色预览。此时,我们可以使用WithTheme能力来达到我们的效果。

2、WithTheme

WithTheme组件可以用于设置应用局部页面自定义主题风格,可设置子组件深浅色模式和自定义主题配色。其中自定义主题配色我们在之前的文章中已经有过讲解,详见:鸿蒙UI开发——自定义主题色。

WidthTheme接口定义如下:

WithTheme(options: WithThemeOptions)

其中WithThemeOptions定义如下:

struct WidthThemeOptions {/* 用于自定义WithTheme作用域内组件缺省配色。 默认值:undefined,缺省样式跟随系统token默认样式。 */theme: CustomTheme;/*用于指定WithTheme作用域内组件配色深浅色模式。 默认值:ThemeColorMode.System。*/colorMode: ThemeColorMode;}

其中theme我们在之前自定义主题色的文章中已经有介绍,不再赘述,详见鸿蒙UI开发——自定义主题色。其中colorMode是深浅色的配置,其值是一个枚举,定义如下:​​​​​​​

SYSTEM // 跟随系统深浅色模式。LIGHT // 固定使用浅色模式。DARK // 固定使用深色模式。

需要注意:

WidthTheme不支持通用属性(例如:长/宽/背景色等)与通用事件(例如:点击、触摸、拖拽等)的设置。

3、使用示例

在WithTheme的作用范围内,组件的样式资源值会根据指定的模式,读取对应的深浅色模式系统和应用资源值。这意味着,在WithTheme作用范围内,组件的配色会根据所指定的深浅模式进行调整。

通过WithTheme({ colorMode: ThemeColorMode.DARK }),可以将作用范围内的组件设置为深色模式。

设置局部深浅色时,需要添加dark.json资源文件,深浅色模式才会生效。添加位置为:resources -> dark -> element -> dark.json(如果没有对应的文件或者文件夹,自己手动创建即可),示意图如下:

图片

dark.json具体的示例代码如下:​​​​​​​

  {    "color": [      {        "name": "start_window_background",        "value": "#FFFFFF"      }    ]  }

使用WidthTheme的示例如下(我们可以在Page中局部生效深色和亮色模式,代码见 18行、33行):​​​​​​​

// 指定局部深浅色模式@Entry@Componentstruct Index {  build() {    Column() {    // 系统默认      Column() {        Text('无WithTheme')          .fontSize(40)          .fontWeight(FontWeight.Bold)      }      .justifyContent(FlexAlign.Center)      .width('100%')      .height('33%')      .backgroundColor($r('sys.color.background_primary'))      // 设置组件为深色模式      WithTheme({ colorMode: ThemeColorMode.DARK }) {        Column() {          Text('WithTheme')            .fontSize(40)            .fontWeight(FontWeight.Bold)          Text('DARK')            .fontSize(40)            .fontWeight(FontWeight.Bold)        }        .justifyContent(FlexAlign.Center)        .width('100%')        .height('33%')        .backgroundColor($r('sys.color.background_primary'))      }      // 设置组件为浅色模式      WithTheme({ colorMode: ThemeColorMode.LIGHT }) {        Column() {          Text('WithTheme')            .fontSize(40)            .fontWeight(FontWeight.Bold)          Text('LIGHT')            .fontSize(40)            .fontWeight(FontWeight.Bold)        }        .justifyContent(FlexAlign.Center)        .width('100%')        .height('33%')        .backgroundColor($r('sys.color.background_primary'))      }    }    .height('100%')    .expandSafeArea([SafeAreaType.SYSTEM], [SafeAreaEdge.TOP, SafeAreaEdge.END, SafeAreaEdge.BOTTOM, SafeAreaEdge.START])  }}

效果如下(在同一个Page中,我们默认的样式为亮色,中间局部实现了深色模式渲染):

图片


http://www.kler.cn/a/453540.html

相关文章:

  • 芯片Tapeout power signoff 之IR Drop Redhawk Ploc文件格式及其意义
  • Unity功能模块一对话系统(1)前置准备
  • Postman接口测试01|接口测试基础概念、http协议、RESTful风格、接口文档
  • C 实现植物大战僵尸(一)
  • VS Code AI开发之Copilot配置和使用详解
  • mysql性能问题排查
  • flink-1.16 table sql 消费 kafka 数据,指定时间戳位置消费数据报错:Invalid negative offset 问题解决
  • Vue项目中env文件的作用和配置
  • 分布式光纤传感|分布式光纤测温|线型光纤感温火灾探测器DTS|DTS|DAS|BOTDA的行业16年的总结【2024年】
  • 【Spring】基于XML的Spring容器配置——<bean>标签与属性解析
  • 【物联网技术与应用】实验15:电位器传感器实验
  • 浏览器工作原理与实践-12|栈空间和堆空间:数据是如何存储的
  • ChatGPT助力数据可视化与数据分析效率的提升(一)
  • Devolved AI:Athena2 推动去中心化人工智能的边界
  • 一维、线性卡尔曼滤波的例程(MATLAB)
  • 界面控件DevExpress v24.2新版亮点 - 支持.NET9、增强跨平台性
  • 龙迅#LT89121适用于8lane VBO转MIPI应用功能方案。
  • Posison Distribution
  • 【若依】用 post 请求传 json 格式的数据下载文件
  • nginx-代理服务
  • 校史馆云展厅适合远程教学吗?
  • Windows系统上创建Flask服务器
  • 服务器https证书过期处理、部署https证书教程
  • CMOS Sensor常见缩略语
  • 2024金融大模型实践方案的概览(附实践资料合集)
  • GDPU Vue前端框架开发 期末赛道出勇士篇(更新ing)