当应用需要根据设备的深、浅色模式变化动态切换主题时,开发者可通过UIAbility的onConfigurationUpdate回调判断模式的变化,然后设置模式对应的字体颜色及背景色。
适配深、浅色主题主要涉及1个接口,具体介绍如下表所示。
| 接口名 | 描述 |
|---|---|
| setPageConfig(pageConfig: ReaderSetting): void | 设置或者修改页面排版属性。 |
监听UIAbility的onConfigurationUpdate回调,并通过应用级变量的状态管理AppStorage保存当前colorMode值。
import { Configuration, UIAbility } from '@kit.AbilityKit';
export default class EntryAbility extends UIAbility {
onConfigurationUpdate(newConfig: Configuration): void {
AppStorage.setOrCreate('colorMode', newConfig.colorMode);
}
} 阅读页通过@StorageLink装饰器监听colorMode字段的变化。如果颜色变化,则触发对应主题色的变更。
import { ConfigurationConstant } from '@kit.AbilityKit';
@StorageLink('colorMode') @Watch('colorModeChange') colorMode: ConfigurationConstant.ColorMode =
ConfigurationConstant.ColorMode.COLOR_MODE_NOT_SET;
/**
* 系统深色模式变化,可以重新设置主题
*/
colorModeChange() {
if (this.colorMode === ConfigurationConstant.ColorMode.COLOR_MODE_DARK) {
this.readerSetting.nightMode = true;
this.readerSetting.fontColor = '#ffffff';
this.readerSetting.themeColor = '#202224';
} else {
this.readerSetting.nightMode = false;
this.readerSetting.fontColor = '#000000';
this.readerSetting.themeColor = '#FFFFFF';
}
this.readerComponentController.setPageConfig(this.readerSetting);
}