在React Native中隐藏Android导航栏

chhkpiq4  于 2023-01-27  发布在  React
关注(0)|答案(9)|浏览(127)

如何在React Native中隐藏Android Navigation Bar
我指的是屏幕底部的工具栏,其中包含软件的后退按钮和主页按钮,而不是页面顶部的组件,其中包含导航组件。

This page on android.com解释了如何为原生开发者做到这一点。有人能解释一下如何通过React原生应用程序来完成这一点吗?谢谢。

brccelvz

brccelvz1#

如果你想永久实现这一点,你必须隐藏导航栏时,应用程序被创建,当它回到焦点。
为此,请在MainActivity.java中添加以下代码:

...
import android.os.Bundle;
import android.view.View;

public class MainActivity extends ReactActivity {

    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        hideNavigationBar();
    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus) {
            hideNavigationBar();
        }
    }

    private void hideNavigationBar() {
        getWindow().getDecorView().setSystemUiVisibility(View.SYSTEM_UI_FLAG_HIDE_NAVIGATION);
    }
}

您可能希望使其“沉浸式”,以便用户仍然可以通过从屏幕底部拖动来访问导航栏。为此,添加View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY标志:

...
import android.os.Bundle;
import android.view.View;

public class MainActivity extends ReactActivity {

    ...

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        hideNavigationBar();
    }

    @Override
    public void onWindowFocusChanged(boolean hasFocus) {
        super.onWindowFocusChanged(hasFocus);
        if (hasFocus) {
            hideNavigationBar();
        }
    }

    private void hideNavigationBar() {
        getWindow().getDecorView().setSystemUiVisibility(
            View.SYSTEM_UI_FLAG_HIDE_NAVIGATION
            | View.SYSTEM_UI_FLAG_IMMERSIVE_STICKY);

    }
}

您可以在android documentation上找到更多选项。

cig3rfwq

cig3rfwq2#

要隐藏Android导航栏,你可以使用react-native-navigation-bar-color来隐藏导航栏,它允许你显示或隐藏导航栏。你可以在here文档中看到更多信息。注意,它适用于Expo,因为它需要你链接本地代码。
安装过程相当简单:

npm install react-native-navigation-bar-color --save

然后,您需要链接包(仅适用于react-native〈= 0.59.0):

react-native link react-native-navigation-bar-color

完成此操作后,您可以按以下方式使用它:

import {
  HideNavigationBar,
  ShowNavigationBar,
} from 'react-native-navigation-bar-color';

然后当你想显示你刚才使用的导航栏时

ShowNavigationBar();

要隐藏它,您可以用途:

HideNavigationBar();
q3qa4bjr

q3qa4bjr3#

根据Martin Konicek的回答:
我继续编写了您需要的包和模块:https://gist.github.com/dhrrgn/16a8dfa7581a682627c6
您需要将其添加到MainActivity.java文件中的getPackages方法中,并向包发送ReactActivity对象,如下所示:new NavigationBarAndroidPackage(this)

**注:**代码未经测试,但应该适合您(您需要更改第一行的package)。我只是使用了您发送的链接中提供的示例代码作为示例。根据您的需要进行修改。

p1iqtdky

p1iqtdky4#

我已经创建了一个导航栏隐藏/显示,颜色变化和更多的包。
React Native系统导航栏

安装

yarn add react-native-system-navigation-bar

npm install react-native-system-navigation-bar

链接

https://www.npmjs.com/package/react-native-system-navigation-bar
https://github.com/kadiraydinli/react-native-system-navigation-bar

e5nqia27

e5nqia275#

JavaScript中没有内置的API来执行此操作。
好消息是,在React Native中,您可以通过编写一个原生模块来向JavaScript公开任何原生功能,参见documentation
通过这种方式,您可以提供一个类似NavigationBarAndroid.hide()的JS函数,并让它调用您链接到的API。

ne5o7dgx

ne5o7dgx6#

使用此选项:https://github.com/Anthonyzou/react-native-full-screen
用法:

import FullScreen from 'react-native-full-screen'
FullScreen.onFullScreen()
FullScreen.offFullScreen()
vawmfj5a

vawmfj5a7#

对于世博建筑:

expo install expo-navigation-bar

防止内容从跳跃与这navbar

NavigationBar.setPositionAsync("absolute");

隐藏导航栏

NavigationBar.setVisibilityAsync("hidden");

透明背景

NavigationBar.setBackgroundColorAsync("#ffffff00");

用户仍可滑动以显示按钮

NavigationBar.setBehaviorAsync("inset-swipe");

我试着用<TouchableWithoutFeedback > Package 我的屏幕,以便能够在NavigationBar.setVisibilityAsync("hidden")中使用onPress prop,但即使没有onPress,底部导航栏在滑动时也只显示一小会儿

vddsk6oq

vddsk6oq8#

我在Android 9和我没有测试

import {HideNavigationBar} from 'react-native-navigation-bar-color';

但当切换到另一个应用程序时,导航栏再次出现。
目前为止对我来说最好的解决办法是
路易斯·扎瓦兹基
在我的www.example.com上复制它mainactivity.java可以很好地工作,并且总是在更改后隐藏。

xu3bshqb

xu3bshqb9#

我今天被卡在了同一个点上。我找到了一篇中等的文章,完成了这项工作。这个问题似乎很老了,然而,一些新读者可能会发现这很有帮助。
https://medium.com/@mykl.ashton/how-to-hide-the-android-pie-navigation-bar-in-react-native-895e34c9e41
在本文中,作者编写了原生的java方法来控制导航栏,然后使用react原生桥从react端访问这些方法。
这是一篇很长的文章,但对我来说效果非常好!希望这能有所帮助!

相关问题