0

我正在编写我的第一个 react-native 应用程序,并且想像 GMail 那样切换主题。
事实上,当我们在手机设置中更改主题模式或在夜间设置自动深色主题时,GMail 的颜色会变深。
因此,我尝试按照文档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));
}

4

2 回答 2

3

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

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

为了测试此功能,您可以在 Android 10 及更高版本中将 DarkTheme 更改为 ON/OFF。

于 2021-02-06T13:59:51.983 回答
0

使用配色方案

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

第一的

import {useColorScheme} from 'react-native;

然后,在你的功能组件中

const colorScheme = useColorScheme();

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

于 2021-12-31T07:47:20.440 回答