gpt4 book ai didi

react-native - react native 操作栏和 react native 菜单

转载 作者:行者123 更新时间:2023-12-01 09:47:43 26 4
gpt4 key购买 nike

我是 React-Native 的新手,到目前为止我很喜欢它。我正在尝试创建一个屏幕(用于跨平台应用程序),右上角有一个菜单图标,单击时,我想打开一个菜单,希望使用 react-native-menu 来显示“退出”和“帐户”菜单选项。在此之后很难弄清楚如何调用菜单。感谢任何帮助。

 import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
View,
} from 'react-native';
import ActionBar from 'react-native-action-bar';


export test class Main extends Component {

render() {

return (
<View style={styles.screen}>
<ActionBar
containerStyle={styles.bar}
backgroundColor='#33cc33'
rightIcons={[
{
name: 'menu',
onPress: () => console.log('menu clicked'),
},
]}
/>
</View>



);
}
}


const styles = StyleSheet.create({
screen: {
backgroundColor: '#33cc33',
flex: 1,
paddingTop: 10,
alignItems: 'center',
//padding: 10
},

});

AppRegistry.registerComponent('Main', () => Main);

最佳答案

我尝试完成您的案例,我添加了库 react-native-drawer-layout用于创建菜单抽屉布局。您可以在 this 中找到用于安装。

步骤 1 - 创建菜单列表(我创建了一个单独的菜单,以便在我想添加另一个菜单时更容易),它的内容仅为 ArrayList。我调用了那个文件 Constants , 你可以写在 Constants.js喜欢 :

export const MENU_LIST = [
{ index: 1, name: 'Action' },
{ index: 2, name: 'Sign Out' },
]


第 2 步 - 我创建用于显示菜单列表的菜单组件。在 Menu.js你这样写:

import React, { Component } from 'react';
import { View, ScrollView, Text, TouchableOpacity } from 'react-native';

const menuList = require('./Constants.js');

export default class Menu extends Component {
render() {
return (
<View style={{ flex:1, backgroundColor: '#33cc33'}}>
<ScrollView>
{menuList.MENU_LIST.map(item => (
<TouchableOpacity
key={item.index}
onPress={() => console.log('entered menu')}
>
<Text style={{color: 'white', fontSize: 16, paddingLeft: 20, paddingTop: 16}}>{item.name}</Text>
</TouchableOpacity>
))}
</ScrollView>
</View>
);
}
}


第 3 步 - 重构主要组件,如:

import React, { Component } from 'react';
import { AppRegistry, StyleSheet, View } from 'react-native';
import ActionBar from 'react-native-action-bar';
import DrawerLayout from 'react-native-drawer-layout';

import Menu from './Menu';

export default class App extends Component {
constructor(props) {
super(props);
this.state = {
drawerClosed: true,
};
this.toggleDrawer = this.toggleDrawer.bind(this);
this.setDrawerState = this.setDrawerState.bind(this);
}

setDrawerState() {
this.setState({
drawerClosed: !this.state.drawerClosed,
});
}

toggleDrawer = () => {
if (this.state.drawerClosed) {
this.DRAWER.openDrawer();
} else {
this.DRAWER.closeDrawer();
}
}

render() {
return (
<DrawerLayout
drawerWidth={300}
ref={drawerElement => {
this.DRAWER = drawerElement;
}}
drawerPosition={DrawerLayout.positions.left}
onDrawerOpen={this.setDrawerState}
onDrawerClose={this.setDrawerState}
renderNavigationView={() => <Menu />}
>
<ActionBar
containerStyle={styles.bar}
backgroundColor="#33cc33"
leftIconName={'menu'}
onLeftPress={this.toggleDrawer}/>

</DrawerLayout>
);
}
}

const styles = StyleSheet.create({
screen: {
backgroundColor: '#33cc33',
flex: 1,
paddingTop: 10,
alignItems: 'center',
//padding: 10
},
});

AppRegistry.registerComponent('Main', () => App);


在我的模拟器中,它将显示为:

enter image description here

当我点击菜单图标时,它将显示如下:

enter image description here

更新-1:

如果你想让组件抽屉菜单不填满底部,你可以在组件 <Menu /> 中播放样式。 ,我为包装器提供了余量,例如:

const styles = StyleSheet.create({
wrapper: {
backgroundColor: '#33cc33',
marginTop: 50,

},

listMenu: {
color: 'white',
fontSize: 16,
paddingLeft: 20,
paddingTop: 12,
paddingBottom: 12,
}

});


并在 <Menu /> 中为组件添加样式喜欢 :

export default class Menu extends Component {
render() {
return (
<View style={styles.wrapper}> //add style wrapper
<ScrollView>
{menuList.MENU_LIST.map(item => (
<TouchableOpacity
key={item.index}
onPress={() => console.log('entered menu')}
>
<Text style={styles.listMenu}>{item.name}</Text> //add style menu
</TouchableOpacity>
))}
</ScrollView>
</View>
);
}
}


完整代码在 Menu.js喜欢 :

import React, { Component, PropTypes } from 'react';
import { View, ScrollView, Text, TouchableOpacity, Image, StyleSheet } from 'react-native';
import Icon from 'react-native-vector-icons/MaterialIcons';

const menuList = require('./Constants.js');

export default class Menu extends Component {
render() {
return (
<View style={styles.wrapper}>
<ScrollView>
{menuList.MENU_LIST.map(item => (
<TouchableOpacity
key={item.index}
onPress={() => console.log('entered menu')}
>
<Text style={styles.listMenu}>{item.name}</Text>
</TouchableOpacity>
))}
</ScrollView>
</View>
);
}
}

const styles = StyleSheet.create({
wrapper: {
backgroundColor: '#33cc33',
marginTop: 50,

},

listMenu: {
color: 'white',
fontSize: 16,
paddingLeft: 20,
paddingTop: 12,
paddingBottom: 12,
}

});


结果如下:

enter image description here

更新-2:

根据您在评论中的情况,如果您想更改位置 menu向右。您必须先改变抽屉的位置。

实际上 :
  • 我将抽屉设置在屏幕的一半位置,并将位置放在左侧。您可以在 main 中看到文件如:


  •  render() {
    return (
    <DrawerLayout

    /* This for set width drawer */

    drawerWidth={300}

    /* end */

    ref={drawerElement => {
    this.DRAWER = drawerElement;
    }}

    /* This for set position drawer */

    drawerPosition={DrawerLayout.positions.left}

    /* end */

    onDrawerOpen={this.setDrawerState}
    onDrawerClose={this.setDrawerState}
    renderNavigationView={() => <Menu />}
    >
    <ActionBar
    containerStyle={styles.bar}
    backgroundColor="#33cc33"
    leftIconName={'menu'}
    onLeftPress={this.toggleDrawer}

    />

    </DrawerLayout>
    );
    }


    希望:
  • 我在右边设置了菜单选项。您只需更改位置抽屉,如:


  •  render() {
    return (
    <DrawerLayout
    drawerWidth={300}
    ref={drawerElement => {
    this.DRAWER = drawerElement;
    }}

    // i change the position to the right.
    drawerPosition={DrawerLayout.positions.Right}

    onDrawerOpen={this.setDrawerState}
    onDrawerClose={this.setDrawerState}
    renderNavigationView={() => <Menu />}
    >
    <ActionBar
    containerStyle={styles.bar}
    backgroundColor="#33cc33"
    rightIcons={[
    {
    name: 'menu',
    onPress: this.toggleDrawer,
    },
    ]}
    />

    </DrawerLayout>
    );
    }


    如果您想了解 Android 上的 DrawerLayout,您可以阅读文档。
  • API DrawerLayoutAndroid

  • 对于这种情况,我的模拟器显示如下:

    enter image description here

    我希望我的回答可以帮助您并为您提供另一个开发应用程序的想法。斗争... ;))

    关于react-native - react native 操作栏和 react native 菜单,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45451119/

    26 4 0