在expo导航栏react-native中将PlatformColor传递给setBackgroundColorAsync时出现问题

问题描述 投票:0回答:1

在尝试使用 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?或者也许解决方法会有所帮助

android reactjs react-native expo
1个回答
0
投票

这是 Expo 实现中的一个错误,不应该将导航栏的背景颜色设置为资源(如 PlatformColor 返回的颜色)。您可以在此处看到,在 本机方法 中,只有

int
颜色是可接受的值,并且 PlatformColor 不返回
int
。我已经向 Expo 创建了一份问题报告

这很快就会成为一个有争议的问题,因为此功能在 API 级别 35 中已被弃用。更多信息可在 Android 文档中获得。

© www.soinside.com 2019 - 2024. All rights reserved.