当前位置: 首页 > 知识库问答 >
问题:

反应导航:滑动抽屉在Android中不起作用

晁英彦
2023-03-14

我一直在寻找解决方案很长一段时间,但令人惊讶的是,我认为还没有人面对它。所以我把它贴出来了。

我用React Navigation V3创建了一个简单的抽屉导航器。我添加了一个菜单图标,当我单击它时,抽屉就会按原样显示。但是,任何手势都不起作用。从左向右滑动不做任何事情。即使抽屉是打开的,点击空白空间也不会关闭抽屉。

这是我的代码:

import {
    createStackNavigator,
    createSwitchNavigator,
    createAppContainer,
    createDrawerNavigator
} from 'react-navigation';
import Home from './screens/Home';
import LoginForm from './screens/LoginForm';
import Articles from './screens/Articles';

const AuthStack = createStackNavigator({
    LoginScreen: LoginForm
});

const AppStack = createDrawerNavigator({
    HomeScreen: Home,
    ArticlesScreen: Articles
});

const RootNavigator = createSwitchNavigator(
    {
        Auth: AuthStack,
        App: AppStack
    },
    {
        initialRouteName: 'Auth'
    }
);

export default createAppContainer(RootNavigator);

共有3个答案

侯博易
2023-03-14

在0.61.0以上的版本中似乎是固定的,但对于较旧的版本,这对我来说很有效。

index.js中:

. . .
import {gestureHandlerRootHOC} from 'react-native-gesture-handler';
AppRegistry.registerComponent(appName, () => gestureHandlerRootHOC(App));
. . .
景才英
2023-03-14

在项目的index.js中,只需使用手势HandlerRootHOC

import {AppRegistry} from 'react-native';
import App from './App';
import {name as appName} from './app.json';
import { gestureHandlerRootHOC } from 'react-native-gesture-handler'

AppRegistry.registerComponent(appName, () => gestureHandlerRootHOC(App));

资源:https://github.com/react-navigation/drawer/issues/105#issuecomment-540667009

只需将反应本机手势处理程序放在根索引的开头。js

import 'react-native-gesture-handler';
阳兴朝
2023-03-14

我已经找到解决办法了。React Naviation依赖于react-nate-ption-handler库。在React Naviation文档的安装部分,它只说使用命令react-natelink创建链接。这对于iOS来说已经足够了。但是对于Android来说,你必须编辑MainActivity.java文件,这样手势处理程序库才能按预期工作:

import com.facebook.react.ReactActivity;
+ import com.facebook.react.ReactActivityDelegate;
+ import com.facebook.react.ReactRootView;
+ import com.swmansion.gesturehandler.react.RNGestureHandlerEnabledRootView;

public class MainActivity extends ReactActivity {

  @Override
  protected String getMainComponentName() {
    return "Example";
  }

+  @Override
+  protected ReactActivityDelegate createReactActivityDelegate() {
+    return new ReactActivityDelegate(this, getMainComponentName()) {
+      @Override
+      protected ReactRootView createRootView() {
+       return new RNGestureHandlerEnabledRootView(MainActivity.this);
+      }
+    };
+  }
}

请参阅文档:https://kmagiera.github.io/react-native-gesture-handler/docs/getting-started.html

实际上,React导航文档中没有规定修改任何文件,因为它特定于React原生手势处理程序,而不是React导航。我把答案保存在这里,这样可以帮助别人。

更新:React导航的最新文档解决了这个问题

 类似资料:
  • 二等 三等

  • 有没有办法禁用滑动手势来打开导航抽屉?在标签之间滑动时出现菜单真的很烦人。

  • 我是android新手。我有一个关于Android导航抽屉的问题。我在我的应用程序中加入了导航抽屉,一切都很顺利,但我想知道是否有人能帮我在导航抽屉列表中获得惰性动画。 图像的来源。 非常感谢。

  • 有人能告诉我如何创建活动到这个主要活动,导航抽屉将看到在所有他们?我需要使用这个特定的MainActivity代码。我不需要使用碎片,只要3个简单的活动将添加到这个抽屉。 NavDrawer布局:

  • 我一直在遵循谷歌的导航抽屉指南,我想把它添加到一个带有标签和手势的活动中。 我想禁用打开导航抽屉的手势,有人知道怎么做吗?

  • 我正在试用本教程中给出的导航抽屉(幻灯片菜单)。 上面的链接和我的不同之处在于,我试图调用活动而不是调用片段。当应用程序打开时,我无法看到导航抽屉菜单,我只能看到打开HOME活动的操作栏。 以下是我更改的代码:(是否需要一个片段,或者我可以在导航抽屉的第一个屏幕上使用活动?) 我如何解决这个问题,以便在我的家庭活动中显示导航抽屉? 更新: 我甚至尝试了以下链接中给出的选项: 如何使用导航抽屉调用我