HarmonyOS-首选项数据持久化-持久化字号大小

212 阅读2分钟

HarmonyOS-首选项数据持久化-持久化字号大小

帝心:全网首发HarmonyOS4.0教程(哔哩哔哩)创作者。致力于推广鸿蒙教程开发。

  1. 个人网站-鸿蒙学院
  2. 语雀笔记-编程视界
  3. 微信公众号:不多讲故事

简介

本示例使用@ohos.data.preferences 接口,展示了使用首选项持久化存储数据的功能。本案例源码

使用说明

  1. 拖动滑块调整字号大小。
  2. 退出应用再重新进入,显示上一次退出前的字号大小。

持久化字号大小(缩放倍数)。

在前文持久化主题数据掌握后,顺便持久化一下字号大小。 项目源码


设计思路
  1. 入口类初始化一个新的首选项数据库文件,例如取名:fontSize.db
  2. 准备状态变量绑定到滑块Slider身上, 滑块通过onChange事件修改当前状态变量数据,双向更新。
  3. 在滑块onChange事件中持久化存储
  4. aboutToAppear函数中获取持久化的字号大小放大倍数

编码过程
  1. src/main/ets/common/DxConstants.ets文件中追加常量数据
  //  存储字号大小的 数据库 名称
  static readonly PREFERENCES_FontSize:string = "fontSizeScale.db"
  // 存储字号大小 倍数 的时候 key
  static readonly FONTSIZE_KEY:string = "fontSizeScale"
  // 字号大小 倍数 默认值
  static readonly fontSizeScaleDefault : number= 1
  1. 在入口类 src/main/ets/preferencesability/PreferencesAbility.ets 中初始化首选项数据库文件
  onCreate(want: Want, launchParam: AbilityConstant.LaunchParam): void {
    console.log("dxin => PreferencesAbility is Created")
    // 获取主模块传递过来的参数
    let abilityWant = want
    let info = abilityWant?.parameters?.info || '首选项'
    AppStorage.setOrCreate("info", info)
​
    // 初始化首选项
    let context = this.context
    // 存储主题的 首选项文件放到 map中
    PreferencesUtil.loadPreference(context, DxConstants.PREFERENCES_THEME)
    // 存储字号大小的 首选项文件  放到 map 中
    PreferencesUtil.loadPreference(context, DxConstants.PREFERENCES_FontSize)
  }
  1. 在UI中使用

    1. 定义状态变量
     @State currentSliderVal: number = DxConstants.fontSizeScaleDefault
    
    1. 页面加载前初始化状态变量
     aboutToAppear(): void {
         // 去查询一下 上次存储的 字号大小数据 数据
         this.currentSliderVal = PreferencesUtil.getPreferenceVal(
           DxConstants.PREFERENCES_FontSize,
           DxConstants.FONTSIZE_KEY,
           DxConstants.fontSizeScaleDefault
         ) as number
     }
    
    1. 在页面中添加滑块组件
      Column() {
         Row() {
           Text(0.8 + "").fontSize(20)
           Text(this.currentSliderVal.toFixed(1)).fontSize(30).fontColor("#fff50065")
           Text(1.2 + "").fontSize(20)
         }
         .width("80%")
         .height(40)
         .justifyContent(FlexAlign.SpaceBetween)
    ​
         Slider({
           min: 0.8,
           max: 1.2,
           step: 0.1,
           value: this.currentSliderVal
         })
           .width("80%")
           .height(40)
           .onChange((val) => {
             this.currentSliderVal = val
             // 把当前改变的数据,存储起来 持久化
             PreferencesUtil.putPreferenceVal(
               DxConstants.PREFERENCES_FontSize,
               DxConstants.FONTSIZE_KEY,
               this.currentSliderVal
             )
             console.log("dxin => 存储好了字号大小:", this.currentSliderVal)
           })
       }
    
    1. 页面中用到文字的地方,进行字号大小的设置:字号*倍数
     Text(item.name).fontSize(16 * this.currentSliderVal)
    

相关权限

不涉及。

依赖

不涉及。

约束与限制

1.本示例仅支持标准系统上运行,支持设备:纯血鸿蒙华为手机、模拟器。

2.HarmonyOS系统:HarmonyOS NEXT Developer。

3.DevEco Studio版本:DevEco Studio NEXT Developer。