0
  • 聊天消息
  • 系統(tǒng)消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會員中心
創(chuàng)作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

HarmonyOS開發(fā)案例:【app內字體大小調節(jié)】

jf_46214456 ? 來源:jf_46214456 ? 作者:jf_46214456 ? 2024-04-19 15:36 ? 次閱讀

介紹

如何使用基礎組件[Slider],通過拖動滑塊調節(jié)應用內字體大小。要求完成以下功能:

  1. 實現兩個頁面的UX:主頁面和字體大小調節(jié)頁面。
  2. 拖動滑塊改變字體大小系數,列表頁和調節(jié)頁面字體大小同步變化。往右拖動滑塊字體變大,反之變小。
  3. 字體大小支持持久化存儲,再次啟動時,應用內字體仍是調節(jié)后的字體大小。效果圖如下所示:

相關概念

  • 字體大小調節(jié)原理:通過組件Slider滑動,獲取滑動數值,將這個值通過首選項進行持久化,頁面的字體通過這個值去改變大小。
  • [首選項]:首選項為應用提供Key-Value鍵值型的數據處理能力,支持應用持久化輕量級數據,并對其修改和查詢。

環(huán)境搭建

軟件要求

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

硬件要求

  • 開發(fā)板類型:[潤和RK3568開發(fā)板]。
  • OpenHarmony系統(tǒng):3.2 Release。

環(huán)境搭建

完成本篇Codelab我們首先要完成開發(fā)環(huán)境的搭建,本示例以RK3568開發(fā)板為例,參照以下步驟進行:

  1. [獲取OpenHarmony系統(tǒng)版本]:標準系統(tǒng)解決方案(二進制)。以3.2 Release版本為例:
  2. 搭建燒錄環(huán)境。
    1. [完成DevEco Device Tool的安裝]
    2. [完成RK3568開發(fā)板的燒錄]
    3. 鴻蒙開發(fā)指導文檔:[gitee.com/li-shizhen-skin/harmony-os/blob/master/README.md]
    4. 開始前請參考[工具準備],完成DevEco Studio的安裝和開發(fā)環(huán)境配置。
    5. 開發(fā)環(huán)境配置完成后,請參考[使用工程向導]創(chuàng)建工程(模板選擇“Empty Ability”)。
    6. 工程創(chuàng)建完成后,選擇使用[真機進行調測]。
    7. HarmonyOS與OpenHarmony鴻蒙文檔籽料:mau123789是v直接拿

搜狗高速瀏覽器截圖20240326151450.png

代碼結構解讀

本篇Codelab只對核心代碼進行講解,完整代碼可以直接從gitee獲取。

├──entry/src/main/ets                // ArkTS代碼區(qū)
│  ├──common
│  │  ├──constants
│  │  │  ├──CommonConstants.ets      // 公共常量類
│  │  │  └──StyleConstants.ets       // 屬性常量類
│  │  ├──database
│  │  │  └──PreferencesUtil.ets      // 首選項數據操作工具類
│  │  └──utils
│  │     ├──GlobalContext.ets        // 全局上下文工具類
│  │     └──Logger.ets               // 日志工具類
│  ├──entryability
│  │  └──EntryAbility.ets            // 程序入口類
│  ├──pages
│  │  ├──HomePage.ets                // 主頁面
│  │  └──SetFontSizePage.ets         // 字體大小調節(jié)頁面
│  ├──view
│  │  ├──ChatItemComponent.ets       // 字體大小調節(jié)頁面聊天Item組件
│  │  ├──SettingItemComponent.ets    // 主頁面列表Item組件
│  │  └──TitleBarComponent.ets       // 頁面標題欄組件
│  └──viewmodel
│     ├──ChatData.ets                // 聊天列表數據類
│     ├──HomeViewModel.ets           // 主頁面數據模型
│     ├──ItemDirection.ets           // 聊天數據位置
│     └──SettingData.ets             // 設置列表數據類
│     └──SetViewModel.ets            // 字體大小調節(jié)頁面數據模型
└──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;
}

修改字體大小

在應用主頁面,點擊設置字體大小,可以跳轉到字體大小調節(jié)頁面。拖動滑塊修改數據后,SetFontSizePage頁面的Slider組件監(jiān)聽到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);
  });
}

審核編輯 黃宇

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發(fā)燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規(guī)問題,請聯系本站處理。 舉報投訴
  • HarmonyOS
    +關注

    關注

    79

    文章

    1958

    瀏覽量

    29912
  • OpenHarmony
    +關注

    關注

    25

    文章

    3613

    瀏覽量

    15975
收藏 人收藏

    評論

    相關推薦

    如何改變ie字體大小,

    如何改變ie字體大小在瀏覽器的窗口里  點“查看”然后在當中有個選項叫“文字大小”,就是在這里面調的。
    發(fā)表于 07-03 11:55

    labview控件的標題中字體無法選中,也就無法更改字體大小

    求大神幫忙解決一下,控件的標題中字體無法選中,也就無法更改字體大小,無法用鼠標來選定標題,謝謝啦
    發(fā)表于 04-01 09:51

    keil5怎么設置字體大小

    keil5怎么設置字體大小,求截圖謝謝
    發(fā)表于 11-14 11:37

    關于批量設置引腳特征值標簽字體大小的問題

    我用的版本是綠色免安裝版9.3。我想批量設置引腳特征值標簽字體大小,但是在[Options]的[text]中只有元件特征值標簽字體大小設置的選項。設置引腳特征值標簽字體大小雖然可以一個一個設置但是太麻煩了。求大神幫助?。?/div>
    發(fā)表于 07-14 17:54

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

    列表框中的字體大小怎么修改?多列列表框和表格屬性里面都沒有找到相關的設置。請教各位大神?。。?/div>
    發(fā)表于 12-25 16:25

    如何設置自定義菜單的字體大小

    如題,有一個項目是在觸屏設備上運行,菜單字體太小不好點,怎么設置自定義菜單的字體大小呢?哪位大神指點下,不勝感激!
    發(fā)表于 09-21 09:46

    DGUS的RTC顯示怎么修改字體大小?

    DGUS的RTC顯示怎么修改字體大小?
    發(fā)表于 02-26 12:00

    DGUS的RTC顯示怎么修改字體大小?

    DGUS的RTC顯示怎么修改字體大小
    發(fā)表于 02-27 22:17

    請問怎么改變TXT文件中的字體大小?

    在CCS中改變C和H文件中的字體大小都可以,就是TXT文件字體太小,不知道如何改變?哪位老師可以指點一下,謝謝
    發(fā)表于 09-20 08:22

    C6748液晶顯示的字體大小調不了

    [/table]C6748液晶顯示的字體大小為什么調不了??調用大一點的字體就出現錯誤[table=98%]
    發(fā)表于 03-13 08:46

    gvim如何修改字體大小?

    gvim修改字體大小
    發(fā)表于 12-29 06:22

    Windows在區(qū)域和語言里設置不同國家時,Labview字體大小也會變化。

    不全。請問大神這種情況除了在開發(fā)文件里一個個修改字體大小。有沒有統(tǒng)一縮放界面字體的辦法呢?請指教,謝謝!
    發(fā)表于 12-03 20:49

    請問鴻蒙WebView如何設置字體大小

    WebView如何設置字體大小,難道只能設置自適應??
    發(fā)表于 04-06 14:53

    Android設置全局字體大小

    Android 如何在設置字體大小統(tǒng)一的情況下,設置全局字體大小
    發(fā)表于 11-27 15:01 ?5924次閱讀

    在SSMS如何改變網格字體大小

    從SQLServer2012開始,SSMS就提供了放大/縮小查詢窗口和網格結果窗格的選項。這是一個非常有用的創(chuàng)新,因為它可以更容易地在各種演示、演示和講座中向觀眾展示查詢和結果,調整字體大小以適應大屏幕,或者只是為了讓有視力問題的人更舒適。
    的頭像 發(fā)表于 11-16 10:56 ?1686次閱讀
    在SSMS如何改變網格<b class='flag-5'>字體大小</b>