Appearance
import { Appearance } from 'react-native';
Appearance
模块提供了关于用户外观偏好的信息,例如他们喜欢的颜色方案(明亮或暗黑)。
给开发者的提示
- Android
- iOS
- Web
Appearance
API的灵感来自 W3C 的媒体查询草案。颜色方案偏好是基于prefers-color-scheme
CSS媒体特性。
用户对颜色方案的偏好将映射到 Android 10(API 级别 29)及更高版本设备上用户的浅色或深色主题偏好。
颜色方案偏好将与用户在 iOS 13 及更高版本设备上的浅色或深色模式偏好相匹配。
示例
Appearance
模块用来检测用户是否开启了暗色模式(夜间模式):
const colorScheme = Appearance.getColorScheme();
if (colorScheme === 'dark') {
// 用户开启了暗色模式
}
尽管颜色方案可以立即使用,但这可能会发生变化(例如,在日出或日落时计划更改颜色方案)。任何依赖于用户首选颜色方案的渲染逻辑或样式都应该在每次渲染时调用此函数,而不是缓存值。例如,您可以使用useColorScheme
React钩子,因为它提供并订阅了颜色方案更新,或者您可以使用内联样式而不是在StyleSheet
中设置值。
文档
方法
getColorScheme()
static getColorScheme(): 'light' | 'dark' | null;
指示当前用户首选的颜色方案。该值可能会在以后更新,可以通过直接用户操作(例如设备设置中的主题选择)或按计划进行(例如遵循日/夜周期的浅色和深色主题)。
支持的颜色方案:
取值 | 说明 |
---|---|
"light" | 用户选择了浅色模式。 |
"dark" | 用户选择了深色模式。 |
null | 用户没有明确选择某种模式。 |
注意: 在使用 chrome 调试时,
getColorScheme()
将始终返回light
。
更多说明请参考useColorScheme
。
setColorScheme()
static setColorScheme('light' | 'dark' | null): void;
强制应用程序始终采用浅色或深色界面风格。默认值为null
,这将导致应用程 序继承系统的界面风格。如果您分配了不同的值,则新样式将适用于应用程序及其内部的所有原生元素(警报、选择器等)。
支持的颜色方案:
light
:使用浅色用户界面风格。dark
:使用深色用户界面风格。- null:遵循系统的界面风格。
注意:此更改不会影响系统选择的界面风格或其他应用程序中设置的任何样式。
addChangeListener()
static addChangeListener(
listener: (preferences: {colorScheme: 'light' | 'dark' | null}) => void,
): NativeEventSubscription;
添加一个事件处理程序,当外观首选项发生变化时触发。