在尝试使用 PlatformColor 作为 expo-navigation-bar 包中的 setBackgroundColorAsync 函数的参数时,我遇到了问题。该函数需要一个 ColorValue,它可以是字符串或 OpaqueColorValue。
但是,当我将 PlatformColor 传递给 setBackgroundColorAsync 时,遇到以下错误:
警告:可能出现未处理的 Promise 拒绝(id:1):
错误:不兼容类的参数:类 java.util.HashMap 无法作为参数传递给需要 int 的参数。
这个错误令人惊讶,因为 PlatformColor 可以与其他组件一起正常工作,例如 View 的 backgroundColor 属性,它也需要 ColorValue。
例如,这段代码可以完美运行:
<View style={{backgroundColor: PlatformColor('@android:color/system_neutral2_900')}}>
</View>
但不是这个:
NavigationBar.setBackgroundColorAsync(PlatformColor('@android:color/system_neutral2_900'));
如果我使用 processColor,就像这样:
import { processColor, PlatformColor } from 'react-native';
const color = processColor(PlatformColor('@android/system_neutral2_900'));
NavigationBar.setBackgroundColorAsync(color);
它说:无法将“[object Object]”转换为 Kotlin 类型
我正在尝试动态设置导航栏颜色以匹配我的 Android 应用程序的当前主题。我希望导航栏颜色能够适应应用程序的整体配色方案,而不是使用黑色等静态颜色。
PS:我已经尝试过使用其他库,例如react-native-navigation-bar-color,但这似乎不适用于我的应用程序。
有没有办法解决此问题并将 PlatformColor 作为参数传递给 setBackgroundColorAsync?或者也许解决方法会有所帮助
这是 Expo 实现中的一个错误,不应该将导航栏的背景颜色设置为资源(如 PlatformColor 返回的颜色)。您可以在此处看到,在 本机方法 中,只有
int
颜色是可接受的值,并且 PlatformColor 不返回 int
。我已经向 Expo 创建了一份问题报告。
这很快就会成为一个有争议的问题,因为此功能在 API 级别 35 中已被弃用。更多信息可在 Android 文档中获得。