react-native框架下,集成字体并应用全局

server/2024/10/20 4:02:50/

一、存放字体文件

将自定义字体文件(例如 .ttf.otf 文件)放入项目的 assets/fonts 目录中。如果没有这个目录,可以手动创建。

二、配置字体

在项目根目录下建一个文件:react-native.config.js,文件内容如下:


// 现代项目(React Native 0.60 及以上): 通常推荐使用 assets/fonts 目录配合 react-native.config.js 进行管理。
// 这种方式更加标准化,能够自动处理 iOS 和 Android 的资源集成。
// 执行命令链接字体: npx react-native-asset
module.exports = {assets: ['./src/assets/fonts'], // 确保路径正确};

 字体文件存放好之后,react-native.config.js建好之后,执行下面的命令链接字体

执行命令链接字体: npx react-native-asset

三、代码调用

 创建主题上下文文件 ThemeProvider

import React, { createContext, useContext, useState,useEffect  } from 'react';
import AsyncStorage from '@react-native-async-storage/async-storage';
import ThemeBlue from '../themes/ThemeBlue'; // 导入主题1配置文件
import ThemeYellow from '../themes/ThemeYellow'; // 导入主题2配置文件// 创建一个上下文来存储当前主题
const ThemeContext = createContext();// 主题管理器组件,用于提供主题上下文
export const ThemeProvider = ({ children }) => {const [theme, setTheme] = useState(ThemeYellow); // 初始主题为 Theme1const [themeFont, setThemeFont] = useState(ThemesFont.ALGER); // 默认字体useEffect(() => {// 从 AsyncStorage 中获取上次保存的主题const loadTheme = async () => {try {const savedTheme = await AsyncStorage.getItem('appTheme');if (savedTheme) {setTheme(JSON.parse(savedTheme));}const savedThemeFont = await AsyncStorage.getItem('appThemeFont');if (savedThemeFont) {setThemeFont(savedThemeFont);}} catch (error) {console.error('Failed to load theme', error);}};loadTheme();//加载上次保存的主题}, []);// 切换主题的方法const changeTheme = (newTheme) => {try {setTheme(newTheme);AsyncStorage.setItem('appTheme', JSON.stringify(newTheme)); // 将新主题保存到 AsyncStorage} catch (error) {console.error('Failed to save theme', error);}};//切换字体的方法const changeThemeFont = (newFont) => {try {setThemeFont(newFont);AsyncStorage.setItem('appThemeFont', JSON.stringify(newFont)); // 将新字体保存到 AsyncStorage} catch (error) {console.error('Failed to save theme', error);}};return (<ThemeContext.Provider value={{ theme, changeTheme,themeFont,changeThemeFont }}>{children}</ThemeContext.Provider>);
};// 自定义 hook 用于获取当前主题和切换主题方法
export const useTheme = () => {const context = useContext(ThemeContext);if (!context) {throw new Error('useTheme must be used within a ThemeProvider');}return context;
};// 导出所有可用主题
export const Themes = {ThemeBlue,ThemeYellow,
};// 导出所有字体
export const ThemesFont = {ALGER:"ALGER",ARIAL:"ARIAL",ARIBLK:"ARIBLK",
};
//在APP.tsx中引用    ThemeProvider
return (<ThemeProvider><View style={styles.container}><NavigationContainer><AppNavigator initialRoute={initialRoute} /></NavigationContainer></View></ThemeProvider>);
//具体页面调用字体
<Text style={[{fontFamily: themeFont }]}>观察字体样式
</Text>


http://www.ppmy.cn/server/108235.html

相关文章

【数学建模】层次分析法

前些天发现了一个巨牛的人工智能学习网站&#xff0c;通俗易懂&#xff0c;风趣幽默&#xff0c;忍不住分享一下给大家。点击跳转到网站。前言 – 人工智能教程 在数学建模问题求解中什么时候用到层次分析法 在数学建模问题求解中&#xff0c;层次分析法&#xff08;Analytic…

速盾:企业在使用高防 IP 和 CDN 时如何确保数据的安全性?

企业在使用高防 IP&#xff08;Internet Protocol&#xff09;和 CDN&#xff08;Content Delivery Network&#xff09;时&#xff0c;需要采取一系列措施来确保数据的安全性。以下是一些建议&#xff1a; 使用高级防护技术&#xff1a;高防 IP 和 CDN 提供了一系列的安全功能…

CentOS全面停服,国产化提速,央国企信创即时通讯/协同门户如何选型?

01. CentOS停服带来安全新风险&#xff0c; 国产操作系统迎来新的发展机遇 2024年6月30日&#xff0c;CentOS 7版本全面停服&#xff0c;于2014年发布的开源类服务器操作系统——CentOS全系列版本生命周期画上了句号。国内大量基于CentOS开发和适配的服务器及平台&#xff0c…

python源码:基于fastapi+websocket双向信息通道的简易网页聊天室

前言 由于我的另一个想法&#xff0c;我需要使用双向通信&#xff0c;并最终选择了fastapi模块中的WebSocket方法来实现这个目的。 为了能够尽快掌握它&#xff0c;我设计了这个《基于fastapiwebsocket双向信息通道的简易网页聊天室》&#xff0c;并且具备以下功能&#xff1a;…

全能型AI vs 专业型AI:未来是草莓味的AI吗?

草莓&#xff1a;全能型AI的新宠儿&#xff1f; 根据最近的消息&#xff0c;OpenAI的“草莓”模型据说是一个全能型AI&#xff0c;无论是解数学题还是搞定主观营销策略&#xff0c;它都能轻松驾驭。这个AI不仅仅是能解决问题&#xff0c;更是能够跨越多个领域&#xff0c;展现出…

BH1750光照传感器详解(STM32)

目录 一、介绍 二、传感器原理 1.原理图 2.工作原理&#xff1a;结构框图 三、程序设计 main.c文件 bh1750.h文件 bh1750.c文件 四、实验效果 五、资料获取 项目分享 一、介绍 BH1750是一款数字型光照强度传感器&#xff0c;能够获取周围环境的光照强度。内置16bitAD转…

分享一个基于python新闻订阅与分享平台flask新闻发布系统(源码、调试、LW、开题、PPT)

&#x1f495;&#x1f495;作者&#xff1a;计算机源码社 &#x1f495;&#x1f495;个人简介&#xff1a;本人 八年开发经验&#xff0c;擅长Java、Python、PHP、.NET、Node.js、Android、微信小程序、爬虫、大数据、机器学习等&#xff0c;大家有这一块的问题可以一起交流&…

javaee、ssm(maven)、springboot(maven)项目目录结构以及编译后文件目录存放路径

javaee项目目录结构&#xff1a; src下的文件或者是源码编译后都会放在WebRoot&#xff08;项目根目录&#xff09;文件夹\WebRoot\WEB-INF\classes目录中。 编译后的文件夹目录如下&#xff1a; 以上为普通的javaee项目目录结构&#xff0c;同maven工程目录结构是不一样的。…