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

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

HarmonyOS開發(fā)案例:【app內(nèi)字體大小調(diào)節(jié)】

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

介紹

如何使用基礎(chǔ)組件[Slider],通過拖動(dòng)滑塊調(diào)節(jié)應(yīng)用內(nèi)字體大小。要求完成以下功能:

  1. 實(shí)現(xiàn)兩個(gè)頁面的UX:主頁面和字體大小調(diào)節(jié)頁面。
  2. 拖動(dòng)滑塊改變字體大小系數(shù),列表頁和調(diào)節(jié)頁面字體大小同步變化。往右拖動(dòng)滑塊字體變大,反之變小。
  3. 字體大小支持持久化存儲(chǔ),再次啟動(dòng)時(shí),應(yīng)用內(nèi)字體仍是調(diào)節(jié)后的字體大小。效果圖如下所示:

相關(guān)概念

  • 字體大小調(diào)節(jié)原理:通過組件Slider滑動(dòng),獲取滑動(dòng)數(shù)值,將這個(gè)值通過首選項(xiàng)進(jìn)行持久化,頁面的字體通過這個(gè)值去改變大小。
  • [首選項(xiàng)]:首選項(xiàng)為應(yīng)用提供Key-Value鍵值型的數(shù)據(jù)處理能力,支持應(yīng)用持久化輕量級(jí)數(shù)據(jù),并對(duì)其修改和查詢。

環(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ā)板為例,參照以下步驟進(jìn)行:

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

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

代碼結(jié)構(gòu)解讀

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

├──entry/src/main/ets                // ArkTS代碼區(qū)
│  ├──common
│  │  ├──constants
│  │  │  ├──CommonConstants.ets      // 公共常量類
│  │  │  └──StyleConstants.ets       // 屬性常量類
│  │  ├──database
│  │  │  └──PreferencesUtil.ets      // 首選項(xiàng)數(shù)據(jù)操作工具類
│  │  └──utils
│  │     ├──GlobalContext.ets        // 全局上下文工具類
│  │     └──Logger.ets               // 日志工具類
│  ├──entryability
│  │  └──EntryAbility.ets            // 程序入口類
│  ├──pages
│  │  ├──HomePage.ets                // 主頁面
│  │  └──SetFontSizePage.ets         // 字體大小調(diào)節(jié)頁面
│  ├──view
│  │  ├──ChatItemComponent.ets       // 字體大小調(diào)節(jié)頁面聊天Item組件
│  │  ├──SettingItemComponent.ets    // 主頁面列表Item組件
│  │  └──TitleBarComponent.ets       // 頁面標(biāo)題欄組件
│  └──viewmodel
│     ├──ChatData.ets                // 聊天列表數(shù)據(jù)類
│     ├──HomeViewModel.ets           // 主頁面數(shù)據(jù)模型
│     ├──ItemDirection.ets           // 聊天數(shù)據(jù)位置
│     └──SettingData.ets             // 設(shè)置列表數(shù)據(jù)類
│     └──SetViewModel.ets            // 字體大小調(diào)節(jié)頁面數(shù)據(jù)模型
└──entry/src/main/resources	         // 資源文件目錄

保存默認(rèn)大小

應(yīng)用初始化時(shí),為了保證頁面中文本的正常顯示。在entryAbility生命周期onCreate方法處,添加一個(gè)命名為“myPreferences”的首選項(xiàng)表。在表中添加一個(gè)名為“appFontSize”的字段,保存默認(rèn)字體大小。代碼如下所示:

// PreferencesUtil.ets
// 導(dǎo)入首選項(xiàng)數(shù)據(jù)庫
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);
  }
  // 保存默認(rèn)字體大小
  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頁面加載顯示的時(shí)候,即生命周期onPageShow方法處,通過PreferencesUtil工具類中的getChangeFontSize方法讀取首選項(xiàng)中的數(shù)據(jù)。

將讀取到的數(shù)據(jù)保存到頁面帶有@State的變量中,通過這個(gè)變量對(duì)文本字體大小進(jìn)行設(shè)置。代碼如下所示:

// 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;
}

修改字體大小

在應(yīng)用主頁面,點(diǎn)擊設(shè)置字體大小,可以跳轉(zhuǎn)到字體大小調(diào)節(jié)頁面。拖動(dòng)滑塊修改數(shù)據(jù)后,SetFontSizePage頁面的Slider組件監(jiān)聽到onChange事件,改變字體大小后,調(diào)用PreferencesUtil工具類中saveChangeFontSize方法寫入本條數(shù)據(jù)即可。代碼如下所示:

// 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);
    // 保存數(shù)據(jù)
    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);
  });
}

審核編輯 黃宇

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • HarmonyOS
    +關(guān)注

    關(guān)注

    79

    文章

    1966

    瀏覽量

    29962
  • OpenHarmony
    +關(guān)注

    關(guān)注

    25

    文章

    3639

    瀏覽量

    16061
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    如何改變ie字體大小,

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

    labview控件的標(biāo)題中字體無法選中,也就無法更改字體大小

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

    keil5怎么設(shè)置字體大小

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

    關(guān)于批量設(shè)置引腳特征值標(biāo)簽字體大小的問題

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

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

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

    如何設(shè)置自定義菜單的字體大小

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

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

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

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

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

    請(qǐng)問怎么改變TXT文件中的字體大小?

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

    C6748液晶顯示的字體大小調(diào)不了

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

    gvim如何修改字體大小?

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

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

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

    請(qǐng)問鴻蒙WebView如何設(shè)置字體大小?

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

    Android設(shè)置全局字體大小

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

    在SSMS如何改變網(wǎng)格字體大小

    從SQLServer2012開始,SSMS就提供了放大/縮小查詢窗口和網(wǎng)格結(jié)果窗格的選項(xiàng)。這是一個(gè)非常有用的創(chuàng)新,因?yàn)樗梢愿菀椎卦诟鞣N演示、演示和講座中向觀眾展示查詢和結(jié)果,調(diào)整字體大小以適應(yīng)大屏幕,或者只是為了讓有視力問題的人更舒適。
    的頭像 發(fā)表于 11-16 10:56 ?1771次閱讀
    在SSMS如何改變網(wǎng)格<b class='flag-5'>字體大小</b>