RN导航02——createBottomTabNavigator结合StackNavigator使用

RN提供导航组件‘react-navigation’中的底部导航createBottomTabNavigator使用如下:

Step1:创建createBottomTabNavigator组件BottomNavigatorComponent.js

import {createAppContainer, createBottomTabNavigator} from 'react-navigation'
import Page1 from './BottomPage1'
import Page2 from './BottomPage2'
import Page3 from './BottomPage3'
/**
 * 底部标签导航
 */
const bottomNavigator = createBottomTabNavigator(
    /**
     * RouteConfigs
     */
    {
        //路由页面1
        bottomPage1: {
            screen: Page1,
        },
        //路由页面2
        bottomPage2: {
            screen: Page2,
        },
        //路由页面3
        bottomPage3: {
            screen: Page3,
        },
    },
    /**
     * BottomTabNavigatorConfig
     */
    {
        // andorid按下返回键将返回initalRouteName,如果设置非initalRouteName则直接结束标签导航
        backBehavior: 'none',
        // 设置首次加载的页面默认为RouteConfig中第一个(指定的必须为Routeonfig中定义的路由页面)
        //initialRouteName: 'bottomPage3',
        // 定义tab顺序的routeNames数组
        //order: ['bottomPage1', 'bottomPage2', 'bottomPage3'],
        //导航栏选项
        tabBarOptions: {
            //设置是否显示tab上图标
            showIcon: true,
            //设置tab激活时文字和图标(前提是tabBarIcon的style设置tintColor)颜色
            activeTintColor: '#fd742f',
            //设置tab未激活文字和图标(前提是tabBarIcon的style设置tintColor)颜色
            inactiveTintColor: '#a6a1aa',
            //设置tab激活时候背景颜色
            activeBackgroundColor:'#e0dce0',
            //设置整个tabbar的样式(背景颜色、高等( height: 55))
            style: {backgroundColor: '#f5f4f9', height: 55},
            //设置tab上文字样式(可设置字体大小等、内边距等)
            labelStyle: {fontSize: 16},
            // 设置单个tab样式
            //tabStyle:{backgroundColor:'#9524d3',},
            // 设置是否显示tab文字
            //showLabel: true,
            // 设置tab未激活时候背景颜色
            //inactiveBackgroundColor:'#a4d9ff',
        },
    });

const bottomAppContainer = createAppContainer(bottomNavigator);
export default bottomAppContainer;

底部tabBar某个tab页面(BottomPage2.js)

import React, {Component} from 'react';
import {View, Text, Image, TouchableOpacity} from 'react-native';
export default class BottomPage2 extends Component {
    //用于tabBar导航器内的屏幕
    static navigationOptions = {
        //tabBarVisible:      //显示或隐藏标签栏,默认为true(布尔类型)
        tabBarLabel: '热点',   //通用标题可以用作备用headerTitle和tabBarLabel。
        /**
         * 设置tabBarButton的图像
         * @param focused:  当前tab是否选中
         * @param tintColor:选中的组件icon是否使用默认样式,如果设置此值则图标与
         *                   标签文字(activeTintColor/inactiveTintColor)颜色保持一致
         *                   也可以不设置,根据focused来设置不同的图标满足业务需求。
         */
        tabBarIcon: ({focused, horizontal, tintColor}) => {
            if (focused) {
                return <Image source={require('../../images/hot.png')}
                              style={{width: 22, height: 22, tintColor: tintColor}}/>
            } else {
                return <Image source={require('../../images/hot.png')}
                              style={{width: 22, height: 22, tintColor: tintColor}}/>
            }
        },
        //tab点击回调事件; 参数是一个对象,包含:navigation:屏幕导航道具  defaultHandler:tab按下的默认处理程序
        tabBarOnPress: (event) => {
            //调用组建内默认的实现方法
            event.defaultHandler();
        },
    }

    constructor(props) {
        super(props);
        this.state = {};
        this.jumpOutTabBar = this.jumpOutTabBar.bind(this);
    }

    render() {
        return (<View style={{flex: 1, backgroundColor: '#334aad', justifyContent: 'center', alignItems: 'center'}}>
            <Text style={{color: '#fdfdff', fontSize: 30}}>BOTTOM-热点</Text>
            <TouchableOpacity onPress={this.jumpOutTabBar}>
                <Text style={{
                    color: '#fffefd',
                    fontSize: 16,
                    padding: 5,
                    marginTop: 10,
                    borderRadius: 5,
                    borderWidth: 1,
                    borderColor: '#faf8ff'
                }}>跳出标签导航之外页面</Text>
            </TouchableOpacity>
        </View>);
    }

    jumpOutTabBar() {
        this.props.navigation.navigate('scrollPage');
    }
}

 

Step2:将底部导航添加到栈式导航组件内部StackNavigatorComponent.js(可省略单独使用BottomNavigator)

import {
    createStackNavigator,
    createAppContainer,
} from 'react-navigation';

import Welcome from '../WelcomeComponent'
import ScrollComponent from '../ScrollView_ListView'
import TopNavigator from './TopNavigatorComponent'
import BottomNavigator from './BottomNavigatorComponent'
/**¬
 * 栈式导航
 */
const stackNavigator = createStackNavigator(
    //指定要加载的RN组件
    {
        welcomePage: {
            screen: Welcome,
        },
        scrollPage:{
            screen:ScrollComponent,
        },
        topNavigatorPage: {
            screen: TopNavigator,
            navigationOptions: (navigation, screenProps) => ({
                header: null,
            })
        },
        bottomNavigatorPage: {
            screen: BottomNavigator,
            navigationOptions: ({navigation, screenProps}) => ({
                header: null,
            })
        }
    }
);
const appStackNavigator = createAppContainer(stackNavigator);
export default appStackNavigator;

Step3: index.js中使用


import {AppRegistry} from 'react-native';
//单独使用BottomNavigator
import MBottomNavigatorComponent from './UI/navigator_/BottomNavigatorComponent'
//将BottomNavigator嵌入到StackNavigator中使用
import MStackNavigatorComponent from './UI/navigator_/StackNavigatorComponent'
import {name as appName} from './app.json';

AppRegistry.registerComponent(appName, () => MStackNavigatorComponent);

PS:为了扩展方便在底部导航中的tarBarIcon中使用了自定义图片,当然也可以使用react-native-vector-icons中的图标组件。

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
### 回答1: rn8209c和51单片机可以同时使用,但需要进行一定的连接和编程。rn8209c是一种电机驱动芯片,而51单片机是一种常用的微控制器。它们可以一起组成控制电机的系统。 首先,需要将rn8209c连接到51单片机的GPIO口或SPI总线上,以控制电机的旋转速度和方向。同时,对rn8209c进行一些初始化设置,如电流限制和发热保护等。 其次,需要编写程序,以控制rn8209c和51单片机之间的交互。程序可以采用C语言或汇编语言编写,通过调用rn8209c的API函数控制rn8209c的输出电流和电压等信息。同时,通过调用51单片机的GPIO和定时器等接口,控制rn8209c和电机的运行状态。 最后,需要进行实验测试,验证系统的正确性和稳定性。可以通过接入示波器等设备,观察电机的运行情况,调整程序参数,使电机运行更加平稳和精确。 ### 回答2: 首先,8209c是一个数字电源管理芯片,而51单片机是一款基于哈佛结构的8位微控制器,两者的用途和特点不同。8209c主要用于电源管理,支持升压、降压和反相等多种工作模式,具有较高的效率和稳定性。而51单片机则可以应用于各种控制领域,如电子定时、电子秤、温度控制等。它具有较高的运算速度,丰富的接口功能和易于编程的特点。 可以说,8209c和51单片机可以在一些应用领域中同时使用。比如,当我们需要对电源进行多种控制时,可以使用8209c来完成电源管理的任务,然后通过51单片机来实现对整个电路的控制。这样可以将功耗降到最低,并获得更好的性能。 总的来说,8209c和51单片机是两个不同的芯片,各自都有自己的特点和应用范围。可以根据具体的应用场景来选择合适的芯片,以达到最好的效果。 ### 回答3: 8209C是一款功率型MOS晶体管,而51单片机是一款广泛使用的微控制器。这两款硬件在不同的应用场景中有着不同的使用需求,因此可以根据具体的需求选择是否使用这些硬件。 8209C通常用于功率放大器、变换器、逆变器等需要大功率输出的电路,主要用于单片机控制的高功率场合。而51单片机则广泛应用于智能控制、仪器仪表、电子监控等领域。因此,在设计电子产品时,可以选择使用8209C和51单片机进行联合设计,以实现更高效、更精确的电控系统。 同时,这两款硬件都有广泛的使用文档和代码示例,可以帮助开发者快速上手并以更加高效的方式进行开发。因此,无论是在学习嵌入式开发、进行创新性设计研发还是进行产品设计、制造等领域,8209C和51单片机都可以成为值得选择的优秀方案。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值