如何使用 DrawerLayoutAndroid 组件在 react-native 应用程序中构建抽屉?

Posted

技术标签:

【中文标题】如何使用 DrawerLayoutAndroid 组件在 react-native 应用程序中构建抽屉?【英文标题】:How to use DrawerLayoutAndroid component for building drawer in react-native apps? 【发布时间】:2016-11-06 03:00:17 【问题描述】:

我是原生反应新手,我正在尝试构建汉堡抽屉以协助导航。但我找不到合适的文档。我找到了一个,但它是使用 redux 的,所以我放手了。谁能指导我如何为 react-native 应用程序创建抽屉布局?

【问题讨论】:

您可以使用 androidToolbar 来制作汉堡包图标,就像在原生 android 中使用 DrawerLayoutAndroid .... 【参考方案1】:

您可以从以下代码示例中获得帮助: 您的 toolbar.js 可以是:

'use strict';

import React,  Component  from 'react';
import 
StyleSheet,
View,
Text
 from 'react-native';

var ToolbarAndroid = require('ToolbarAndroid');

class MyToolbar extends Component 
render() 
  var navigator = this.props.navigator;
   return (
    <ToolbarAndroid
     title=this.props.title
     navIcon=require('./icons/ic_menu_white_24dp.png')
     style = styles.toolbar
     titleColor='white' 
     onIconClicked=this.props.sidebarRef/>
    );
 

const styles = StyleSheet.create(
//define your own style
  
 );

module.exports = MyToolbar;

用于实现抽屉:

'use strict';

import React,  Component  from 'react';
import 
  StyleSheet,
  View,
  Text,
  Navigator,
  TouchableHighlight,
  TouchableOpacity, 
  DrawerLayoutAndroid,
  ScrollView,
 from 'react-native';

var ToolbarAndroid = require('ToolbarAndroid');
var MyToolbar = require('./MyToolbar');
var MenuItem = require('./MenuItem');

class OpenDraweFromToolbar extends Component 
 render() 

  var navigationView = (
     <ScrollView>
  <View style = height:100, backgroundColor:'blue', justifyContent:'center'>
     <Text style = height:25, color:'white', fontSize:25, marginLeft:20>Welcome To ReactNative</Text>
  </View>
  <ListView
       //render your list items
  </ScrollView>
);

return (
  <DrawerLayoutAndroid
    drawerWidth=300
    drawerPosition=DrawerLayoutAndroid.positions.Left
    renderNavigationView=() => navigationView
    ref='DRAWER'>     
    <MyToolbar style=styles.toolbar
        title='Calendar'
        navigator=this.props.navigator
        sidebarRef=()=>this._setDrawer()/>                  
    <View style=flex: 1, alignItems: 'center'>            
      <Text style=margin: 10, fontSize: 15, textAlign: 'right'>Hello</Text>

    </View>
  </DrawerLayoutAndroid>  
);


 _setDrawer() 
   this.refs['DRAWER'].openDrawer();
    
 

 const styles = StyleSheet.create(
   //your own style implementation

 );

  module.exports = OpenDraweFromToolbar;

您应该将drawerlayout打开方法作为props传递给工具栏,并且在您的工具栏组件中您应该调用sidebarRef作为props,它会自动调用之前OpenDraweFromToolbar.js的drawerlayout打开方法。

希望你能从上面的示例中得到帮助。祝你编码愉快!!!

【讨论】:

嘿,MenuItem 文件由什么组成?你能告诉我MenuItem的结构吗? @atif MenuItem 是要在列表视图上呈现的项目列表,它是作为应用程序中的一个单独组件编写的。但是现在我已经更新了我的代码,你可以在上面看到..我刚刚在滚动视图中呈现列表视图 如何在任何活动中包含工具栏?我怎么能从其他类调用它。 您可以在上面的代码中看到。将工具栏作为 MyToolbar.js 的一个单独组件,并在您需要时包含它。参考上面的示例。 我按照您的指令代码运行良好,但仍然可以在我的屏幕上看到工具栏,这里是代码“var Toolbar = require(./toolbar)”,我正在访问工具栏文件并在渲染中( ) 我已经使用

以上是关于如何使用 DrawerLayoutAndroid 组件在 react-native 应用程序中构建抽屉?的主要内容,如果未能解决你的问题,请参考以下文章

react-native-DrawerLayoutAndroid

React Native开发React Native控件之DrawerLayoutAndroid抽屉导航切换组件讲解(13)

MaterialDesign 之 DrawerLayout

侧滑菜单DrawerLayout

浮动操作按钮不会停留在 SnackBar 的顶部

导航菜单在Child Activity中不起作用