zoukankan      html  css  js  c++  java
  • React Navigation 5.x BottomTab 使用

    底部Tab导航

    基本使用

    导入

    import { createBottomTabNavigator } from '@react-navigation/bottom-tabs';
    

    使用方式和Stack类似

        const RootTab = createBottomTabNavigator();
        return (
            <RootTab.Navigator screenOptions={screenOptionss} tabBarOptions={tabBarOptions}>
                <RootTab.Screen  name="Home" component={HomeScreen} options={{ tabBarBadge: 3, title: "首页" }} 
                />
                <RootTab.Screen name="Settings" options={{ tabBarBadge: 3, title: "设置" }} component={Setting} />
            </RootTab.Navigator>
        )
    
    • screenOptionss ,tabBarOptions 在这里可以对底部导航进行整体的一个属性控制
        const screenOptionss = ({ route }) => {
            return {
                tabBarIcon: ({ focused, color, size }) => {
                    let img = require('./mine.png')
                    //根据组件名称加载不同的图片
                    if (route.name == "Home") {
                        img = require('./mine.png')
                    } else {
                        img = require('./message.png')
                    }
                    //可以返回任何组件
                    return <Image source={img}
                        style={[style.icon, { tintColor: color }]} />
                },
            }
        }
    
        //文本选中和非选中颜色 不会影响icon
        const tabBarOptions = {
            activeTintColor: 'tomato',
            inactiveTintColor: 'gray',
        }
    

    内嵌StackNavigator

    一般tab都和stack结合使用,大多数从tab页跳转到其他页面需要隐藏tab底部栏,官方推荐tab嵌入到stack中

    
        return (
            <NavigationContainer>
                { 
                <Stack.Navigator screenOptions={{headerShown:true}}>
                    <Stack.Screen name="Tab" component={HomeTab} options={{title:"首页"}}  />
                    <Stack.Screen name="List" component={ListScreen} />
                    <Stack.Screen name="Profile" component={ProfileScreen} />
                </Stack.Navigator>
            </NavigationContainer>
        )
    

    HomeTab

    function HomeTab(params) {
        const RootTab = createBottomTabNavigator();
        //.... 
        return (
            <RootTab.Navigator screenOptions={screenOptionss} tabBarOptions={tabBarOptions}>
                <RootTab.Screen  name="Home" component={HomeScreen} options={{ tabBarBadge: 3, title: "首页" }} 
                />
                <RootTab.Screen name="Settings" options={{ tabBarBadge: 3, title: "设置" }} component={Setting} />
            </RootTab.Navigator>
        )
    }
    

    这样在HomeTab内嵌入stack中,所以在切换页面的时候还需要处理下导航栏(各个Tab页面共用的一个导航栏)
    如下监听点击tab事件 改变标题 (这里使用dangerouslyGetParent()来获取stack的navigation)

    class Setting extends Component {
       //...
        componentDidMount() {
            //监听点击tab事件 改变标题
            this.unsubscribe = this.props.navigation.addListener('tabPress', e => {
                // Prevent default action
                this.props.navigation.dangerouslyGetParent().setOptions({title:"设置"})
              });
        }
        componentWillUnmount(){
            this.unsubscribe ();
        } 
        //...
     }
    
  • 相关阅读:
    C#程序设计---->计算圆面积windows程序
    MMORPG大型游戏设计与开发(服务器 游戏场景 地图和区域)
    MMORPG大型游戏设计与开发(服务器 游戏场景 多线程)
    MMORPG大型游戏设计与开发(服务器 游戏场景 核心详述)
    MMORPG大型游戏设计与开发(游戏服务器 游戏场景 概述 updated)
    plain framework 1 pak插件说明(资源压缩加密)
    plain framework 1 版本更新 1.0.2 增加打包插件
    plain framework 1 参考手册 入门指引之 许可协议
    plain framework 1 参考手册 入门指引之 代码风格
    plain framework 1 参考手册 入门指引之 模块
  • 原文地址:https://www.cnblogs.com/cnman/p/14925883.html
Copyright © 2011-2022 走看看