0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
会员中心
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

HarmonyOS开发案例:【app内字体大小调节】

jf_46214456 来源:jf_46214456 作者:jf_46214456 2024-04-19 15:36 次阅读

介绍

如何使用基础组件[Slider],通过拖动滑块调节应用内字体大小。要求完成以下功能:

  1. 实现两个页面的UX:主页面和字体大小调节页面。
  2. 拖动滑块改变字体大小系数,列表页和调节页面字体大小同步变化。往右拖动滑块字体变大,反之变小。
  3. 字体大小支持持久化存储,再次启动时,应用内字体仍是调节后的字体大小。效果图如下所示:

相关概念

  • 字体大小调节原理:通过组件Slider滑动,获取滑动数值,将这个值通过首选项进行持久化,页面的字体通过这个值去改变大小。
  • [首选项]:首选项为应用提供Key-Value键值型的数据处理能力,支持应用持久化轻量级数据,并对其修改和查询。

环境搭建

软件要求

  • [DevEco Studio]版本:DevEco Studio 3.1 Release。
  • OpenHarmony SDK版本:API version 9。

硬件要求

  • 开发板类型:[润和RK3568开发板]。
  • OpenHarmony系统:3.2 Release。

环境搭建

完成本篇Codelab我们首先要完成开发环境的搭建,本示例以RK3568开发板为例,参照以下步骤进行:

  1. [获取OpenHarmony系统版本]:标准系统解决方案(二进制)。以3.2 Release版本为例:
  2. 搭建烧录环境。
    1. [完成DevEco Device Tool的安装]
    2. [完成RK3568开发板的烧录]
    3. 鸿蒙开发指导文档:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]
    4. 开始前请参考[工具准备],完成DevEco Studio的安装和开发环境配置。
    5. 开发环境配置完成后,请参考[使用工程向导]创建工程(模板选择“Empty Ability”)。
    6. 工程创建完成后,选择使用[真机进行调测]。
    7. HarmonyOS与OpenHarmony鸿蒙文档籽料:mau123789是v直接拿

搜狗高速浏览器截图20240326151450.png

代码结构解读

本篇Codelab只对核心代码进行讲解,完整代码可以直接从gitee获取。

├──entry/src/main/ets                // ArkTS代码区
│  ├──common
│  │  ├──constants
│  │  │  ├──CommonConstants.ets      // 公共常量类
│  │  │  └──StyleConstants.ets       // 属性常量类
│  │  ├──database
│  │  │  └──PreferencesUtil.ets      // 首选项数据操作工具类
│  │  └──utils
│  │     ├──GlobalContext.ets        // 全局上下文工具类
│  │     └──Logger.ets               // 日志工具类
│  ├──entryability
│  │  └──EntryAbility.ets            // 程序入口类
│  ├──pages
│  │  ├──HomePage.ets                // 主页面
│  │  └──SetFontSizePage.ets         // 字体大小调节页面
│  ├──view
│  │  ├──ChatItemComponent.ets       // 字体大小调节页面聊天Item组件
│  │  ├──SettingItemComponent.ets    // 主页面列表Item组件
│  │  └──TitleBarComponent.ets       // 页面标题栏组件
│  └──viewmodel
│     ├──ChatData.ets                // 聊天列表数据类
│     ├──HomeViewModel.ets           // 主页面数据模型
│     ├──ItemDirection.ets           // 聊天数据位置
│     └──SettingData.ets             // 设置列表数据类
│     └──SetViewModel.ets            // 字体大小调节页面数据模型
└──entry/src/main/resources	         // 资源文件目录

保存默认大小

应用初始化时,为了保证页面中文本的正常显示。在entryAbility生命周期onCreate方法处,添加一个命名为“myPreferences”的首选项表。在表中添加一个名为“appFontSize”的字段,保存默认字体大小。代码如下所示:

// PreferencesUtil.ets
// 导入首选项数据库
import dataPreferences from '@ohos.data.preferences';

export class PreferencesUtil {
  // 先将Promise< Preferences >保存到全局
  createFontPreferences(context: Context) {
    let fontPreferences: Function = (() = > {
      let preferences: Promise< dataPreferences.Preferences > = dataPreferences.getPreferences(context,
        PREFERENCES_NAME);
      return preferences;
    });
    GlobalContext.getContext().setObject('getFontPreferences', fontPreferences);
  }
  // 保存默认字体大小
  saveDefaultFontSize(fontSize: number) {
    let getFontPreferences: Function =  GlobalContext.getContext().getObject('getFontPreferences') as Function;
    getFontPreferences().then((preferences: dataPreferences.Preferences) = > {
      preferences.has(KEY_APP_FONT_SIZE).then(async (isExist: boolean) = > {
        Logger.info(TAG, 'preferences has changeFontSize is ' + isExist);
        if (!isExist) {
          await preferences.put(KEY_APP_FONT_SIZE, fontSize);
          preferences.flush();
        }
      }).catch((err: Error) = > {
        Logger.error(TAG, 'Has the value failed with err: ' + err);
      });
    }).catch((err: Error) = > {
      Logger.error(TAG, 'Get the preferences failed, err: ' + err);
    });
  }
}

获取字体大小

在HomePage页面加载显示的时候,即生命周期onPageShow方法处,通过PreferencesUtil工具类中的getChangeFontSize方法读取首选项中的数据。

将读取到的数据保存到页面带有@State的变量中,通过这个变量对文本字体大小进行设置。代码如下所示:

// HomePage.ets
onPageShow() {
  PreferencesUtil.getChangeFontSize().then((value) = > {
    this.changeFontSize = value;
    Logger.info(TAG, 'Get the value of changeFontSize: ' + this.changeFontSize);
  })
}
...
// PreferencesUtil.ets工具类
async getChangeFontSize() {
  let fontSize: number = 0;
  let getFontPreferences: Function = GlobalContext.getContext().getObject('getFontPreferences') as Function;
  fontSize = await (await getFontPreferences()).get(KEY_APP_FONT_SIZE, fontSize);
  return fontSize;
}

修改字体大小

在应用主页面,点击设置字体大小,可以跳转到字体大小调节页面。拖动滑块修改数据后,SetFontSizePage页面的Slider组件监听到onChange事件,改变字体大小后,调用PreferencesUtil工具类中saveChangeFontSize方法写入本条数据即可。代码如下所示:

// SetFontSizePage.ets
Slider({
  value: this.changeFontSize === CommonConstants.SET_SIZE_HUGE ? 
    CommonConstants.SET_SLIDER_MAX : this.changeFontSize,
  min: CommonConstants.SET_SLIDER_MIN,
  max: CommonConstants.SET_SLIDER_MAX,
  step: CommonConstants.SET_SLIDER_STEP,
  style: SliderStyle.InSet
})
  ...
  .onChange(async (value: number) = > {
    if (this.changeFontSize === 0) {
      this.changeFontSize = await PreferencesUtil.getChangeFontSize();
      this.fontSizeText = SetViewModel.getTextByFontSize(value);
      return;
    }
    // 获取改变后的字体大小
    this.changeFontSize = (value === CommonConstants.SET_SLIDER_MAX ?
      CommonConstants.SET_SIZE_HUGE : value);
    // 获取字体大小的文本
    this.fontSizeText = SetViewModel.getTextByFontSize(this.changeFontSize);
    // 保存数据
    PreferencesUtil.saveChangeFontSize(this.changeFontSize);
  })
// PreferencesUtil.ets工具类
saveChangeFontSize(fontSize: number) {
  let getFontPreferences: Function =  GlobalContext.getContext().getObject('getFontPreferences') as Function;
  getFontPreferences().then(async (preferences: dataPreferences.Preferences) = > {
    await preferences.put(KEY_APP_FONT_SIZE, fontSize);
    preferences.flush();
  }).catch((err: Error) = > {
    Logger.error(TAG, 'put the preferences failed, err: ' + err);
  });
}

审核编辑 黄宇

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • HarmonyOS
    +关注

    关注

    79

    文章

    1974

    浏览量

    30174
  • OpenHarmony
    +关注

    关注

    25

    文章

    3722

    浏览量

    16303
收藏 人收藏

    评论

    相关推荐

    如何改变ie字体大小,

    如何改变ie字体大小在浏览器的窗口里  点“查看”然后在当中有个选项叫“文字大小”,就是在这里面调的。
    发表于 07-03 11:55

    labview控件的标题中字体无法选中,也就无法更改字体大小

    求大神帮忙解决一下,控件的标题中字体无法选中,也就无法更改字体大小,无法用鼠标来选定标题,谢谢啦
    发表于 04-01 09:51

    keil5怎么设置字体大小

    keil5怎么设置字体大小,求截图谢谢
    发表于 11-14 11:37

    关于批量设置引脚特征值标签字体大小的问题

    我用的版本是绿色免安装版9.3。我想批量设置引脚特征值标签字体大小,但是在[Options]的[text]中只有元件特征值标签字体大小设置的选项。设置引脚特征值标签字体大小虽然可以一个一个设置但是太麻烦了。求大神帮助啊!
    发表于 07-14 17:54

    LabView列表框中的字体大小怎么修改?

    列表框中的字体大小怎么修改?多列列表框和表格属性里面都没有找到相关的设置。请教各位大神!!!
    发表于 12-25 16:25

    如何设置自定义菜单的字体大小

    如题,有一个项目是在触屏设备上运行,菜单字体太小不好点,怎么设置自定义菜单的字体大小呢?哪位大神指点下,不胜感激!
    发表于 09-21 09:46

    DGUS的RTC显示怎么修改字体大小

    DGUS的RTC显示怎么修改字体大小
    发表于 02-26 12:00

    DGUS的RTC显示怎么修改字体大小

    DGUS的RTC显示怎么修改字体大小
    发表于 02-27 22:17

    请问怎么改变TXT文件中的字体大小

    在CCS中改变C和H文件中的字体大小都可以,就是TXT文件字体太小,不知道如何改变?哪位老师可以指点一下,谢谢
    发表于 09-20 08:22

    C6748液晶显示的字体大小调不了

    [/table]C6748液晶显示的字体大小为什么调不了??调用大一点的字体就出现错误[table=98%]
    发表于 03-13 08:46

    gvim如何修改字体大小

    gvim修改字体大小
    发表于 12-29 06:22

    Windows在区域和语言里设置不同国家时,Labview字体大小也会变化。

    不全。请问大神这种情况除了在开发文件里一个个修改字体大小。有没有统一缩放界面字体的办法呢?请指教,谢谢!
    发表于 12-03 20:49

    请问鸿蒙WebView如何设置字体大小

    WebView如何设置字体大小,难道只能设置自适应??
    发表于 04-06 14:53

    Android设置全局字体大小

    Android 如何在设置字体大小统一的情况下,设置全局字体大小
    发表于 11-27 15:01 5975次阅读

    在SSMS如何改变网格字体大小

    从SQLServer2012开始,SSMS就提供了放大/缩小查询窗口和网格结果窗格的选项。这是一个非常有用的创新,因为它可以更容易地在各种演示、演示和讲座中向观众展示查询和结果,调整字体大小以适应大屏幕,或者只是为了让有视力问题的人更舒适。
    的头像 发表于 11-16 10:56 1948次阅读
    在SSMS如何改变网格<b class='flag-5'>字体大小</b>