如题,有没有例子参考
惟草木之零落兮|
App开发
如何动态更换主题颜色?
1
4
浏览280 发布于2024-11-06 13:22未知归属地
全部评论
最多点赞
最新发布
最早发布
百草初晴技术支持
【解决方案】
使用ArkUI主题资源+状态变量,可以实现主题自由切换。具体方案如下:
-
定义主题资源resources/base/element/color.json:
收起自动换行深色代码主题复制{ "color": [ { "name": "start_window_background", "value": "#FFFFFF" }, { "name": "primary_text", "value": "#FF000000" }, { "name": "dark_primary_text", "value": "#FFFFFFFF" }, { "name": "dark_primary_bg", "value": "#FF222222" }, { "name": "primary_bg", "value": "#FFFFFFFF" } ] } -
编写UI组件页面,验证页面主题切换:
收起自动换行深色代码主题复制import { ThemeManager } from './ThemeManager'; const KEY_IS_DARK: string = "isDarkTheme"; @Entry @Component struct Index { // 绑定全局主题状态 @StorageLink(KEY_IS_DARK) isDark: boolean = false; build() { Column() { // 示例1:文本动态颜色 Text("主要内容") .fontColor(this.isDark ? $r("app.color.dark_primary_text") : $r("app.color.primary_text")) .fontSize(20) // 示例2:按钮切换主题 Button(this.isDark ? "切换浅色" : "切换深色") .onClick(() => ThemeManager.toggleTheme()) } .width('100%') .height('100%') .backgroundColor(this.isDark ? $r("app.color.dark_primary_bg") : $r("app.color.primary_bg")) } } -
定义主题管理工具类,实现主题切换功能:
收起自动换行深色代码主题复制const KEY_IS_DARK: string = "isDarkTheme"; export class ThemeManager { // 初始化默认主题 static init() { if (!AppStorage.has(KEY_IS_DARK)) { AppStorage.setOrCreate(KEY_IS_DARK, false); } } // 切换主题 static toggleTheme() { AppStorage.set(KEY_IS_DARK, !AppStorage.get(KEY_IS_DARK)); } // 获取当前主题 static get isDark(): boolean { return AppStorage.get(KEY_IS_DARK) || false; } } ThemeManager.init(); -
主题深浅模式切换效果如下:
浅色:

深色:

展开全部 
3楼回复于2025-09-11 09:13 来自广东
BLACK PINK有DEMO了吗
2楼回复于2024-11-09 01:35 来自湖南
小小唐葫芦已回复2024-12-03 09:58 来自广东
小小唐葫芦Demo如下:
收起
自动换行
深色代码主题
复制
import { CustomTheme, CustomColors, ThemeControl } from '@kit.ArkUI';
// 自定义主题颜色
class BlueColors implements CustomColors {
fontPrimary = Color.Red;
backgroundPrimary = Color.Red;
brand = Color.Blue; //品牌色
}
class PageCustomTheme implements CustomTheme {
colors?: CustomColors;
constructor(colors: CustomColors) {
this.colors = colors;
}
}
// 创建实例
const BlueColorsTheme = new PageCustomTheme(new BlueColors());
@Entry
@Preview
@Component
struct ExampleComponent {
@State counter: number = 0;
@State userName: string = "HongMeng";
build() {
Column() {
Text(`Counter: ${this.counter}`)
.fontSize(24)
.margin(10);
Button("Change")
.onClick(() => {
this.counter += 1;
// 在页面build之前执行ThemeControl.setDefaultTheme,设置App默认样式风格为BlueColorsTheme。
ThemeControl.setDefaultTheme(BlueColorsTheme);
})
.margin(10);
}
}
} 展开全部 
1楼编辑于2024-12-03 09:58 来自广东
写回答
新增插入模板功能
一键使用模板,快速填写内容,轻松发帖~
知道了
- 为了保障您的信息安全,请勿上传您的敏感个人信息(如您的密码等信息)和您的敏感资产信息(如关键源代码、签名私钥、调试安装包、业务日志等信息),且您需自行承担由此产生的信息泄露等安全风险。
- 如您发布的内容为转载内容,请注明内容来源。
我要提问题
相关推荐
换一批
1
HarmonyOS 怎么定义多个主题颜色(API12+)
2
HarmonyOS 如何获取图片颜色(API12+)
3
HarmonyOS textOverflow能否指定省略号颜色 (API12+)
4
HarmonyOS 如何实现一个动态变化颜色的边框(API12+)
5
HarmonyOS 如何实现应用内动态主题换肤(API12+)
6
HarmonyOS 如何在一行文字上加上颜色动态修改的效果 (API12+)
7
formula_hybrid转换公式适配主题色切换
8
HarmonyOS 如何设置主题颜色不跟随系统(API12+)
了解社区公约,与您携手共创和谐专业的开发者社区。




































苏公安网备 32011402010933号