HarmonyOS鸿蒙Next中切换深色模式后,重启应用,设置丢失

HarmonyOS鸿蒙Next中切换深色模式后,重启应用,设置丢失 切换深色模式后,重启应用,设置丢失

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%')
  }
}

//EntryAbility.ets:

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接口,开发者需要通过UIServiceThemeManager来监听系统主题变化,并在应用启动时读取并应用持久化的主题设置。如果应用未正确实现这些逻辑,可能会导致重启后设置丢失。开发者应确保在onCreateonRestoreInstanceState等生命周期方法中恢复主题设置,并处理系统主题变化的回调。

在HarmonyOS鸿蒙Next中,切换深色模式后重启应用导致设置丢失,可能是由于应用未正确处理系统主题切换或未持久化用户设置。建议检查应用的onConfigurationChanged方法,确保在系统主题变化时更新应用界面。同时,使用SharedPreferencesDataAbility等机制保存用户设置,确保重启后能恢复。若问题持续,建议更新系统或应用至最新版本,或提交问题报告给开发者。

回到顶部
AI 助手
你好,我是IT营的 AI 助手
您可以尝试点击下方的快捷入口开启体验!