【问题标题】:React Native Appearance.addChangeListener() does nothingReact Native Appearance.addChangeListener() 什么都不做
【发布时间】:2020-12-07 20:10:04
【问题描述】:

我正在编写我的第一个 react-native 应用程序,并且想像 GMail 一样切换主题。
确实,当我们在手机设置中更改主题模式或在夜间设置自动深色主题时,GMail 的颜色会变深。
所以我尝试按照doc 中的说明实现Appearance.addChangeListener,但不幸的是该功能不起作用。

我正在尝试使用 Android 10。

我如何在不重新启动应用程序的情况下在手机主题更改时更新应用程序的颜色?

useEffect(() => {
    dispatch(changeTheme(Appearance.getColorScheme()));
    Appearance.addChangeListener(onThemeChange);

    return () => Appearance.removeChangeListener(onThemeChange);
}, []);

// This function is never call
const onThemeChange = ({ colorScheme }) => {
    console.log("onThemeChange", colorScheme)
    dispatch(changeTheme(colorScheme));
}

【问题讨论】:

  • 我对原生反应也很陌生。传递给 addChangeListener 的函数不应该在 useEffect 块内声明吗?

标签: react-native themes react-native-android android-dark-theme


【解决方案1】:

我通过将此代码添加到 MainActivity.java 解决了这个问题:

import android.content.res.Configuration;
    
@Override
public void onConfigurationChanged(Configuration newConfig) {
  super.onConfigurationChanged(newConfig);
  getReactInstanceManager().onConfigurationChanged(this, newConfig);
}

为了测试此功能,您可以在 Android 10 及更高版本中打开/关闭 DarkTheme。

【讨论】:

【解决方案2】:

使用颜色方案

你可以使用useColorScheme,它会自动更新。

第一

import {useColorScheme} from 'react-native;

那么,在你的功能组件中

const colorScheme = useColorScheme();

我还建议编写自己的自定义钩子来更新 colorScheme 上的 StatusBar 和 NavigationBar 更改

【讨论】:

    猜你喜欢
    • 2019-02-18
    • 2015-06-16
    • 1970-01-01
    • 2020-05-23
    • 2019-03-08
    • 2016-12-24
    • 2017-04-18
    • 2011-08-03
    • 2014-05-11
    相关资源
    最近更新 更多