3 回复
可以用首选项进行模式更改后的保存
//index.ets
```javascript
import { common, ConfigurationConstant } from '[@kit](/user/kit).AbilityKit';
import preferences from '[@ohos](/user/ohos).data.preferences';
import dataPreferences from '[@ohos](/user/ohos).data.preferences';
import { BusinessError } from '[@kit](/user/kit).BasicServicesKit';
[@Entry](/user/Entry)
[@Component](/user/Component)
struct Index {
[@State](/user/State) message: string = 'Hello World';
[@State](/user/State) flag:boolean=false
build() {
RelativeContainer() {
Button('点击').onClick(() => {
let options: preferences.Options = { name: 'myStore' };
let context = getContext(this) as common.Context;
let dataPreferences = preferences.getPreferencesSync(context, options);
let value: preferences.ValueType = dataPreferences.getSync('color', false);
console.log(value+'7667676')
})
Button('Set Dark')
.fontSize(50)
.fontWeight(FontWeight.Bold)
.alignRules({
center: { anchor: '__container__', align: VerticalAlign.Center },
middle: { anchor: '__container__', align: HorizontalAlign.Center }
})
.onClick(() => {
let options: preferences.Options = { name: 'myStore' };
let context = getContext(this) as common.Context;
let dataPreferences = preferences.getPreferencesSync(context, options);
getContext().getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_DARK);
console.info("The key 'startup' does not contain.");
dataPreferences.putSync('color', true);
dataPreferences.flush((err: BusinessError) => {
if (err) {
console.error("Failed to flush. code ="+err.code+", message ="+err.message);
return;
}
console.info("Succeeded in flushing.");
})
})
Button('Set ligh')
.onClick(() => {
let options: preferences.Options = { name: 'myStore' };
let context = getContext(this) as common.Context;
let dataPreferences = preferences.getPreferencesSync(context, options);
getContext().getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_LIGHT);
dataPreferences.putSync('color', false);
dataPreferences.flush((err: BusinessError) => {
if (err) {
console.error("Failed to flush. code ="+err.code+", message ="+err.message);
return;
}
console.info("Succeeded in flushing.");
})
})
}
.height('100%')
.width('100%')
}
}
import { AbilityConstant, common, ConfigurationConstant, UIAbility, Want } from '[@kit](/user/kit).AbilityKit';
import { hilog } from '[@kit](/user/kit).PerformanceAnalysisKit';
import { window } from '[@kit](/user/kit).ArkUI';
import { preferences } from '[@kit](/user/kit).ArkData';
import { BusinessError } from '[@kit](/user/kit).BasicServicesKit';
let dataPreferences: preferences.Preferences | null = null;
export default class EntryAbility extends UIAbility {
onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onCreate');
}
onDestroy(): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onDestroy');
}
onWindowStageCreate(windowStage: window.WindowStage): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageCreate');
windowStage.loadContent('pages/Index', (err) => {
let options: preferences.Options = { name: 'myStore' };
let context = getContext(this) as common.Context;
let dataPreferences = preferences.getPreferencesSync(context, options);
let value: preferences.ValueType = dataPreferences.getSync('color', false);
console.log(value+'7667676')
if(value) {
this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_DARK)
} else {
this.context.getApplicationContext().setColorMode(ConfigurationConstant.ColorMode.COLOR_MODE_LIGHT)
}
if (err.code) {
hilog.error(0x0000, 'testTag', 'Failed to load the content. Cause: %{public}s', JSON.stringify(err) ?? '');
return;
}
hilog.info(0x0000, 'testTag', 'Succeeded in loading the content.');
});
}
onWindowStageDestroy(): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onWindowStageDestroy');
}
onForeground(): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onForeground');
}
onBackground(): void {
hilog.info(0x0000, 'testTag', '%{public}s', 'Ability onBackground');
}
}
更多关于HarmonyOS鸿蒙Next中切换深色模式后,重启应用,设置丢失的实战系列教程也可以访问 https://www.itying.com/category-93-b0.html
在HarmonyOS鸿蒙Next中,切换深色模式后,如果应用重启导致设置丢失,可能是由于应用的深色模式设置未正确持久化或未与系统主题状态同步。鸿蒙Next系统提供了深色模式的API接口,开发者需要通过UIService
或ThemeManager
来监听系统主题变化,并在应用启动时读取并应用持久化的主题设置。如果应用未正确实现这些逻辑,可能会导致重启后设置丢失。开发者应确保在onCreate
或onRestoreInstanceState
等生命周期方法中恢复主题设置,并处理系统主题变化的回调。