当前位置: 首页 > wzjs >正文

深圳市网站制作公司嘉兴优化公司

深圳市网站制作公司,嘉兴优化公司,复兴企业做网站推广,网站建设的总结与评价文章目录 一、Light / Dark Mode 的原理1. 操作系统层2. React Native 如何获取?3. 样式怎么跟着变?二、关键代码示例讲解代码讲解:三、自定义主题四、运行时自动更新五、核心原理一张图组件应用例子最小示例:动态样式按钮的动态样式如何封装一套自定义主题四、如何和 Them…

文章目录

  • 一、Light / Dark Mode 的原理
    • 1. 操作系统层
    • 2. React Native 如何获取?
    • 3. 样式怎么跟着变?
  • 二、关键代码示例讲解
    • 代码讲解:
  • 三、自定义主题
  • 四、运行时自动更新
  • 五、核心原理一张图
  • 组件应用例子
    • 最小示例:动态样式
    • 按钮的动态样式
    • 如何封装一套自定义主题
    • 四、如何和 ThemeProvider 配合?
    • 小技巧
    • 总结
  • 总结一句话

这其实是现代移动应用开发中非常常用的功能:自动适配浅色/深色模式(Light / Dark Mode)。

在业内,譬如 React Native + Expo 把这个机制做得非常友好,下面我帮你从原理到代码一步步拆解,让你彻底理解它是如何工作的。

一、Light / Dark Mode 的原理

1. 操作系统层

所有的主流操作系统(Android、iOS、macOS、Windows)都提供了「全局配色方案」设置:

  • 浅色(Light)
  • 深色(Dark)

当用户在系统里选择了一个模式后,操作系统会把这个偏好传递给应用程序


2. React Native 如何获取?

React Native 暴露了一个 hook

const colorScheme = useColorScheme();

这个 hook:

  • 自动监听系统主题
  • 返回 'light''dark'null

例如:

const colorScheme = useColorScheme();
console.log(colorScheme);
// 可能打印:'light' 或 'dark'

一旦系统主题改变(比如用户切换深色模式),React Native 会自动重新渲染你的组件。


3. 样式怎么跟着变?

知道当前主题后,你就可以:

  • 切换颜色
  • 切换主题对象
  • 切换字体或其他样式

Expo Router 的模板里,就是通过 <ThemeProvider> 提供一个全局主题对象:

<ThemeProvider value={colorScheme === 'dark' ? DarkTheme : DefaultTheme}>
  • 当 colorScheme 是 'dark',使用 DarkTheme
  • 当 colorScheme 是 'light',使用 DefaultTheme

所有内部的组件(如导航、背景色、按钮)就都自动使用对应的颜色配置。


二、关键代码示例讲解

来看你提到的核心代码:

return (<ThemeProvider value={colorScheme === 'dark' ? DarkTheme : DefaultTheme}><Stack><Stack.Screen name="(tabs)" options={{ headerShown: false }} /><Stack.Screen name="+not-found" /></Stack><StatusBar style="auto" /></ThemeProvider>
);

代码讲解:

useColorScheme()

  • 获取系统主题

ThemeProvider

  • 提供全局主题对象
  • 内部的 StackTabDrawer 会自动根据这个 Theme 渲染样式(背景、字体颜色、分隔线等)

DarkThemeDefaultTheme

  • 都是内置的主题对象

  • 定义了:

    • 主色
    • 背景色
    • 文本颜色
    • 边框色
    • 卡片颜色

StatusBar style="auto"

  • 自动根据主题切换状态栏字体颜色(黑色/白色)

三、自定义主题

如果你想扩展自己的配色,可以在 themes.ts 文件定义:

export const MyLightTheme = {...DefaultTheme,colors: {...DefaultTheme.colors,primary: '#1e90ff',background: '#ffffff',text: '#333333',},
};export const MyDarkTheme = {...DarkTheme,colors: {...DarkTheme.colors,primary: '#1e90ff',background: '#000000',text: '#ffffff'
http://www.dtcms.com/wzjs/118779.html

相关文章:

  • 做网站宝安杭州百度推广电话
  • 网站开发天津网站开发中国十大网络营销平台
  • 息壤网站打不开了长沙seo排名公司
  • 精品网站建设公司搜索引擎优化的主要内容
  • 东莞网站建设 烤活鱼个人网站搭建
  • 直播平台网站建设上海网络优化服务
  • 南阳企业网站建设公司广州软件系统开发seo推广
  • 昆明网站建设推广服务seo引擎优化是什么
  • iis禁止通过ip访问网站seo推广方案怎么做
  • 宁波免费建站seo排名sem对seo的影响有哪些
  • win主机wordpressseo研究协会网
  • 软文营销的成功案例seo上首页排名
  • 制作一个学校门户网站河北seo基础
  • 怎么做体育直播网站百度收录刷排名
  • 安卓wordpress自己怎么优化关键词
  • 网站建设报告中国站长之家域名查询
  • 官方网站建设流程及费用网页搜索优化
  • 网站建设维护费摊销天津网站快速排名提升
  • 自动卖卡密的网站怎么做seo 专业
  • 网站域名放国外国外b站浏览器
  • 网站建设企业建站要求西安seo网站排名
  • 广州建设工程造价管理站百度引流推广费用多少
  • 做电信网站运营商谷歌建站
  • 网投怎么做网站公司网络营销推广
  • 专业网站建设公司用织梦吗上海seo推广服务
  • 如何制作课程网站模板下载地址全球搜索
  • 7免费网站建站做公司网站需要多少钱
  • 网络域名大全seo优化操作
  • 图片做动画网站长沙网站到首页排名
  • 长沙网站建设论坛营销策划案ppt优秀案例