鸿蒙实战开发-如何通过拖动滑块调节应用内字体大小

注意:免费节点订阅链接已更新至 2025-12-17点击查看详情

介绍

本篇Codelab将介绍如何使用基础组件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.搭建烧录环境。

    • 完成DevEco Device Tool的安装
    • 完成RK3568开发板的烧录

3.搭建开发环境。

    • 开始前请参考工具准备,完成DevEco Studio的安装和开发环境配置。
    • 开发环境配置完成后,请参考使用工程向导创建工程(模板选择“Empty Ability”)。
    • 工程创建完成后,选择使用真机进行调测。

代码结构解读

本篇Codelab只对核心代码进行讲解。

├──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);   }); }

总结

您已经完成了本次Codelab的学习,并了解到以下知识点:

  1. 使用Slider实现滑动条。
  2. 使用首选项实现持久化应用轻量级数据。

为了帮助大家更深入有效的学习到鸿蒙开发知识点,小编特意给大家准备了一份全套最新版的HarmonyOS NEXT学习资源,获取完整版方式请点击→《HarmonyOS教学视频

HarmonyOS教学视频

鸿蒙语法ArkTS、TypeScript、ArkUI等.....视频教程

鸿蒙生态应用开发白皮书V2.0PDF:

获取完整版白皮书请点击→《鸿蒙生态应用开发白皮书V2.0PDF

鸿蒙 (Harmony OS)开发学习手册

一、入门必看

  1. 应用开发导读(ArkTS)
  2. ……

二、HarmonyOS 概念

  1. 系统定义
  2. 技术架构
  3. 技术特性
  4. 系统安全
  5. ........

三、如何快速入门?《做鸿蒙应用开发到底学习些啥?

  1. 基本概念
  2. 构建第一个ArkTS应用
  3. ……

四、开发基础知识

  1. 应用基础知识
  2. 配置文件
  3. 应用数据管理
  4. 应用安全管理
  5. 应用隐私保护
  6. 三方应用调用管控机制
  7. 资源分类与访问
  8. 学习ArkTS语言
  9. ……

五、基于ArkTS 开发

  1. Ability开发
  2. UI开发
  3. 公共事件与通知
  4. 窗口管理
  5. 媒体
  6. 安全
  7. 网络与链接
  8. 电话服务
  9. 数据管理
  10. 后台任务(Background Task)管理
  11. 设备管理
  12. 设备使用信息统计
  13. DFX
  14. 国际化开发
  15. 折叠屏系列
  16. ……

更多了解更多鸿蒙开发的相关知识可以参考:鸿蒙 (Harmony OS)开发学习手册

突破网络限制:详解通过修改Hosts文件实现高效科学上网

引言:当网络遇到边界

在全球化信息流动的今天,互联网本应是无国界的知识海洋。然而由于政策法规、版权限制或网络安全等因素,许多用户发现自己被无形的数字围墙所阻挡——无法访问学术论文库、错过国际流媒体内容、甚至与海外亲友的社交平台失联。面对这种情况,技术爱好者们开发出了多种"科学上网"方案,其中修改Hosts文件以其简单直接、响应迅速的特点,成为最亲民的解决方案之一。本文将带您深入探索这种"网络捷径"的奥秘。

一、Hosts文件:互联网的原始导航系统

1.1 什么是Hosts文件?

Hosts文件是计算机系统中一个没有扩展名的特殊文本文件,其历史可追溯到ARPANET时代(现代互联网的前身)。它本质上是本地化的域名解析系统,就像一本手写的通讯录:

```text

经典Hosts文件示例

127.0.0.1 localhost ::1 localhost 104.16.88.20 www.example.com ```

1.2 现代网络中的定位

尽管DNS(域名系统)已成为主流,Hosts文件仍被保留为优先级别最高的解析方式。当您在浏览器输入网址时,操作系统会:
1. 首先检查Hosts文件
2. 若无记录才查询DNS服务器
3. 最终通过获得的IP地址建立连接

这种机制正是我们实现"网络突围"的技术基础。

二、实战指南:四步完成Hosts魔法

2.1 获取目标网站真实IP(关键步骤)

推荐三种精准获取IP的方法:

方法一:Ping命令侦查
```bash

Windows用户

ping twitter.com

Mac/Linux用户

ping -c 4 twitter.com ``` 注意:部分网站已禁用ping响应,需尝试其他方法

方法二:全球DNS侦探
通过第三方工具如:
- DNS Checker
- WhatsMyDNS
这些服务可显示网站在不同国家的解析结果

方法三:历史IP数据库
- IPHistory
- ViewDNS
特别适合经常变更IP的流媒体网站

2.2 修改系统Hosts文件

Windows系统详细路径
C:\Windows\System32\drivers\etc\hosts 需右键选择"以管理员身份运行"记事本进行编辑

Mac/Linux终端操作
bash sudo nano /etc/hosts 输入密码后即可编辑,Ctrl+O保存,Ctrl+X退出

2.3 编写映射规则的艺术

每条记录应遵循标准格式:
[IP地址] [域名] [可选注释] 实用案例:
```text

社交媒体专区

104.244.42.1 twitter.com # 主站 104.244.42.65 mobile.twitter.com # 移动端

流媒体加速

203.107.1.1 netflix.com # 美国节点 203.107.1.2 api-global.netflix.com # 接口域名 ```

2.4 验证与故障排除

完成修改后需要:
1. 刷新DNS缓存:
- Windows: ipconfig /flushdns
- Mac: sudo killall -HUP mDNSResponder
- Linux: systemd-resolve --flush-caches
2. 使用curl测试:
bash curl -v https://目标网站 3. 推荐工具:
- Hosts文件编辑器
- SwitchHosts(多配置切换)

三、进阶技巧:让Hosts发挥极致效能

3.1 动态IP应对方案

针对频繁更换IP的网站:
- 使用脚本自动更新(Python示例):
```python import requests import re from datetime import datetime

def updatehosts(): newip = requests.get("https://api.ipify.org").text with open('/etc/hosts','r+') as f: content = re.sub(r'\d+.\d+.\d+.\d+ example.com', f'{new_ip} example.com', f.read()) f.seek(0) f.write(f"# 最后更新于{datetime.now()}\n"+content) ```

3.2 安全防护措施

  • 定期校验IP真实性(避免DNS污染):
    bash nslookup 可疑IP
  • 使用HTTPS强制加密:安装浏览器插件如"HTTPS Everywhere"
  • 敏感操作建议配合Cloudflare Warp等基础加密

四、横向对比:Hosts方案的优势边界

| 特性 | 修改Hosts | VPN | 代理服务器 | Tor网络 | |------------|----------|----------|----------|----------| | 连接速度 | ★★★★★ | ★★★☆ | ★★★★ | ★★☆ | | 配置难度 | ★★☆ | ★★★★ | ★★★☆ | ★★★ | | 隐私保护 | ★☆ | ★★★★☆ | ★★★☆ | ★★★★★ | | 突破能力 | ★★★☆ | ★★★★★ | ★★★★ | ★★★★☆ | | 移动端支持 | ★★★ | ★★★★★ | ★★★★ | ★★★ |

注:Hosts方案最适合需要快速访问固定被墙网站的场景

五、风险提示与法律边界

  1. 技术中立原则:Hosts文件本是系统正常功能
  2. 合规警示
    • 中国大陆用户需遵守《网络安全法》
    • 企业环境修改需获得IT部门授权
  3. 潜在风险
    • 恶意IP可能导致中间人攻击
    • 某些网站会封禁非常用IP的访问

结语:在便捷与安全间寻找平衡

修改Hosts文件就像给计算机装上了一副特殊的"网络眼镜",它能让我们看见原本被遮蔽的数字景观。这种方案凝结着早期互联网的简洁哲学——用文本文件解决复杂问题。尽管它不具备VPN的加密特性,也没有智能代理的自动切换能力,但正是这种"机械感"带来了独特的可靠性。

正如一位资深网络工程师所说:"Hosts文件是互联网最后的诚实地图,当你学会正确绘制它,就掌握了通往自由网络的第一把钥匙。"在技术快速迭代的今天,这个诞生于1970年代的功能依然焕发着生命力,或许这就是简洁设计的永恒魅力。

知识延伸:对技术爱好者而言,可以进一步研究DNS-over-HTTPS(DoH)与Hosts文件的协同使用,这将大幅提升方案的安全等级。而对于普通用户,记住定期更新IP地址和备份原始Hosts文件,就是最好的数字生存策略。

版权声明:

作者: freeclashnode

链接: https://www.freeclashnode.com/news/article-316.htm

来源: FreeClashNode

文章版权归作者所有,未经允许请勿转载。

免费节点实时更新

热门文章

最新文章

归档