React Native Android导航栏翻译

z4bn682m  于 2023-10-23  发布在  React
关注(0)|答案(6)|浏览(153)

我正在尝试将android上的导航栏设置为半透明。看一下这个图像,例如:

(来源:morenews.pk
我试过使用react-native-navigation-bar-color,但它只允许我隐藏导航栏/显示导航栏/改变导航栏的颜色。所以使用这个导航栏库,我试图设置changeNavigationBarColor('transparent');,但它使我的应用程序崩溃。
我也试过在AndroidManifest.xml中设置android:fitsSystemWindows="true",这是我从here带来的,但不幸的是没有什么变化。

dfddblmv

dfddblmv1#

获得半透明导航和状态栏的一个好方法是在android > app > src > main > res > values > styles.xml中添加3个样式项
这些将设置底部导航栏为半透明:
<item name="android:navigationBarColor">@android:color/transparent</item>
<item name="android:windowTranslucentNavigation">true</item>
这一条将顶部状态栏设置为半透明:
<item name="android:windowTranslucentStatus">true</item>
styles.xml中的实现示例:

<resources>
    <!-- Base application theme. -->
    <style name="AppTheme" parent="Theme.AppCompat.DayNight.NoActionBar">
        <!-- Customize your theme here. -->
        <item name="android:textColor">#000000</item>

        <!-- Make status & navigation bar translucent -->
        <item name="android:navigationBarColor">@android:color/transparent</item>
        <item name="android:windowTranslucentNavigation">true</item>
        <item name="android:windowTranslucentStatus">true</item>
    </style>
</resources>

这将使您的内容呈现在状态和导航栏下方。
要解决这个问题,您可以使用react-native-safe-area-context来获取安全区域insets。
安全内容视图示例:

import { SafeAreaInsetsContext } from "react-native-safe-area-context";
const ContentView = (props) => {
    const safeInsets = useContext(SafeAreaInsetsContext);
    return (
        <View
            style={[
                {
                    marginLeft: safeInsets?.left,
                    marginTop: safeInsets?.top,
                    marginRight: safeInsets?.right,
                    marginBottom: safeInsets?.bottom
                }
            ]}
        >
            {props.children}
        </View>
    );
}
cgh8pdjw

cgh8pdjw2#

所以我看了一下这个模块,发现它只是使用了原生的android Color库来解析字符串。(可以在这里找到它的链接:https://developer.android.com/reference/android/graphics/Color
我能够使用文档中指定的#AARRGGBB模式获得导航栏透明度。不支持3或4个字母的十六进制字符串,也不支持rgb字符串。一些颜色名称被列为支持,但transparent不是其中之一。
不幸的是,即使我能够将导航栏设置为完全透明,我也无法让应用程序在它后面实际绘制任何东西,所以完全透明实际上最终只是白色,而介于两者之间的任何东西都是相对于白色背景的透明度。

deikduxw

deikduxw3#

您似乎不接受字符串值。你想试试这个吗?

changeNavigationBarColor('rgba(0,0,0,0)',true)
3npbholx

3npbholx4#

我们需要自定义导航栏,并添加安全区。然后给予您所需的颜色安全区。下面是一个例子,

<ImageBackground style={{flex:1, backgroundColor: 'silver'}} source={require('./des.jpeg')}>
<SafeAreaView style={{backgroundColor: 'transparent'}}/>

</ImageBackground>
tvmytwxo

tvmytwxo5#

我猜是迟到了,但今天对我有用的是,使用expo,可以在https://docs.expo.dev/versions/latest/sdk/navigation-bar/找到
npx expo install expo-navigation-bar
然后在App.js文件中的函数块之前添加以下内容:

// enables edge-to-edge mode
NavigationBar.setPositionAsync('absolute')
// transparent backgrounds to see through
NavigationBar.setBackgroundColorAsync('#ffffff00')
// changes the color of the button icons "dark||light"
NavigationBar.setButtonStyleAsync("dark");
r1wp621o

r1wp621o6#

你只需要在app.json中添加以下代码:

"androidNavigationBar": {
  "visible": "sticky-immersive"
},

相关问题