Back to .md Directory
HarmonyOS 主题与样式 - Cursor Rules
你正在为HarmonyOS应用开发相关功能。以下是你需要遵循的开发规则。
核心原则
- 响应用户/系统偏好: UI应自动适配深浅色模式及用户自定义亮度。
- 保持视觉一致性: 在不同模式和页面间,保持UI元素的统一性和协调性。
- 优化资源与性能: 合理管理资源,避免不必要的电量消耗和性能开销。
- 提供流畅用户体验: 确保用户在不同场景下(如视频播放、付款码)获得无缝且舒适的体验。
推荐做法
代码结构
- 资源目录管理: 利用HarmonyOS的资源目录机制 (
src/main/resources/base用于浅色模式,src/main/resources/dark用于深色模式) 管理深浅色资源。 - 同名资源定义: 在
base和dark目录下,为同一种UI元素(如颜色、图片)定义同名的资源文件和资源项,实现自动切换。
最佳实践
- 深浅色模式适配:
- 颜色资源: 自定义颜色应定义在
base/element/color.json和dark/element/color.json中,并通过$('app.color.your_color_name')引用。优先使用系统级颜色资源。 - 媒体资源:
- SVG图标: 利用
fillColor()属性,使其颜色跟随当前主题变化。 - 非SVG图片: 在
base/media和dark/media目录下放置同名图片资源。
- SVG图标: 利用
- 状态栏: 确保状态栏背景和内容字体颜色与应用深浅模式保持一致。
- Web页面: 配合前端开发,使应用内嵌Web内容支持深色模式(利用CSS媒体查询
prefers-color-scheme)。 - 模式切换: 提供应用跟随系统模式切换 (
applicationContext.setColorMode(ColorMode.COLOR_MODE_NOT_SET)) 或用户手动切换的选项。
- 颜色资源: 自定义颜色应定义在
- 页面亮度与常亮控制:
- 页面级亮度: 使用
window.setWindowBrightness()实现页面专属亮度。利用uiObserver.on('navDestinationUpdate')监听页面跳转,并在页面进入时应用亮度,离开时恢复系统默认或前一页面的亮度。 - 屏幕常亮: 在沉浸式场景(如视频播放)中,通过
window.setWindowKeepScreenOn(true)保持屏幕常亮。务必将其与组件生命周期绑定(如onStart开启,onPause/onDestroy关闭)。 - 用户UI: 为需要用户调节亮度的场景(如视频播放器)提供
Slider等UI组件,方便用户调节。
- 页面级亮度: 使用
禁止做法
- 硬编码颜色值: 避免直接在代码中写入十六进制或RGB颜色值,应统一通过资源引用。
- 不及时关闭屏幕常亮: 在不需要常亮时(如视频暂停、页面退出)不调用
setWindowKeepScreenOn(false),导致不必要的电量消耗和设备发热。 - 深浅色资源命名不一致: 在
base和dark目录下为同一元素定义不同的资源名称,导致深浅色模式切换失败。
代码示例
推荐写法
// 1. 深浅色模式下引用颜色资源
Text('Hello HarmonyOS')
.fontColor($r('app.color.text_primary')) // text_primary 在base和dark下定义不同颜色
// 2. 页面亮度动态设置与屏幕常亮
// 假设在视频播放页面的某个组件内
@State currentBrightness: number = 0.5; // 当前页面亮度
aboutToAppear() {
// 进入页面时设置亮度,并保持屏幕常亮
window.setWindowBrightness(this.currentBrightness);
window.setWindowKeepScreenOn(true);
}
aboutToDisappear() {
// 离开页面时恢复系统亮度,并关闭屏幕常亮
window.setWindowBrightness(-1); // -1 表示恢复系统默认亮度
window.setWindowKeepScreenOn(false);
}
// 用户通过Slider调节亮度
Slider({ value: this.currentBrightness, min: 0.01, max: 1.0, step: 0.01 })
.onChange((value: number) => {
this.currentBrightness = value;
window.setWindowBrightness(value);
})
避免写法
// 1. 硬编码颜色值
Text('Avoid this')
.fontColor('#FF0000') // 硬编码红色,在深色模式下可能不协调
// 2. 随意开启屏幕常亮,不及时关闭
// 假设某个地方开启了常亮,但没有对应的关闭逻辑
window.setWindowKeepScreenOn(true); // 容易造成电量浪费
注意事项
- 资源自动切换: HarmonyOS会自动根据系统颜色模式加载对应资源目录下的同名资源,无需额外代码判断。
- 页面亮度作用域:
window.setWindowBrightness()仅在当前应用内生效,退出应用后系统亮度会自动恢复。 - Web组件适配: Web内容的深色模式适配通常需要前端开发人员配合完成,确保Web内容自身支持
prefers-color-scheme。 - 权限: 某些亮度或窗口操作可能需要特定权限,请查阅官方文档。
Related Documents
cursor-rules.md
Journey from Concept to Code: Transforming Cursor into a Devin-like AI Assistant
square: https://daily.borninsea.com/assets/image_1739763605490_yobtaj.png
aiagentllm
0
4
wanghaishengcursor-rules.md
grapeot/devin.cursorrules
date: 2025-07-03T22:11:02.060257
cursor
0
3
tom-doerrcursor-rules.md
dbt Core
A powerful open-source data transformation tool that enables analytics engineers to transform data in their warehouses by writing modular SQL enhanced with Jinja templating.
ai
0
3
agbackhoffcursor-rules.md
Cursor Development Environment
docker build -f Dockerfile.dev -t clawdrive-dev .
aiagentrag
0
2
CyberImmortal