首先看图:底部导航,每个按钮对应不同的页面,按钮激活状态和非激活状态可以设置按钮的颜色字体大小等。
运行后展示欢迎页面,若干秒后跳转到这个页面
思路:在index.js中指向 创建的 appNavigators 文件
这个文件导入两个页面,一个是欢迎页,一个是进入后的展示页
欢迎页用定时器,若干秒后跳转到展示页,展示页创建一个总的展示页,HomePage,
可以把他理解为路由,然后展示各个里面的页面。
操作:根目录创建 js 文件,里面放两个文件夹,navigator,page
index.js :
import {AppRegistry} from 'react-native'; import App from './App'; import {name as appName} from './app.json'; import 'react-native-gesture-handler'; import AppNavigators from './js/navigator/AppNavigators' AppRegistry.registerComponent(appName, () => AppNavigators);
NavigationUtil.js: 用来做跳转的工具
export default class NavigationUtil { static resetToHomePage(params) { const {navigation} = params; navigation.navigate('Main');//跳转到Main } }
AppNavigators.js:展示两个页面,并且取消头部展示
import {createAppContainer,createSwitchNavigator} from 'react-navigation'; import {createStackNavigator} from 'react-navigation-stack' import WelcomePage from '../page/WelcomePge' import HomePage from '../page/HomePage' const InitNavigator = createStackNavigator({ WelcomePage:{ screen:WelcomePage, navigationOptions:{ header:null, } } }); const MainNavigator = createStackNavigator({ HomePage:{ screen:HomePage, navigationOptions:{ header:null } } }); export default createAppContainer(createSwitchNavigator({ Init:InitNavigator, Main:MainNavigator },{ navigationOptions:{ header:null } }));
WelcomePage:做一个定时器展示后关闭定时器,调用util方法跳转到Main,也就是homepage页面
import React, {Component} from 'react'; import {Text, StyleSheet, View} from 'react-native'; import NavigationUtil from '../navigator/NavigationUtil'; export default class WelcomePage extends Component { componentDidMount() { this.timer = setTimeout(() => { NavigationUtil.resetToHomePage(this.props) }, 7000); } componentWillMount() { // this.timer && clearTimeout(this.timer); } render() { return ( <View style={styles.container}> <Text> WelcomePge12 </Text> </View> ); } } const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', }, });
Homepage:创建底部导航,导入各个页面,设置各种属性,比如名字和标签颜色 尺寸,封装成一个标签,最后展示这个标签就行
import React, {Component} from 'react'; import {Text, StyleSheet, View} from 'react-native'; import {createBottomTabNavigator} from 'react-navigation-tabs'; import {createAppContainer} from 'react-navigation'; //页面 import PapularPage from './PopularPage'; import TrendingPage from './TrendingPage'; import FavoritePage from './FavoritePage'; import MyPage from './MyPage'; //图标 import Ionicons from 'react-native-vector-icons/Ionicons' export default class HomePage extends Component { _tabNavigator(){ return createAppContainer(createBottomTabNavigator({ PapularPage:{ screen:PapularPage, navigationOptions:{ tabBarLabel:'最热', tabBarIcon:({tintColor,focused})=>( <Ionicons name={'home'} size={26} style={{color:tintColor}} /> ) } }, TrendingPage:{ screen:TrendingPage, navigationOptions:{ tabBarLabel:'趋势', tabBarIcon:({tintColor,focused})=>( <Ionicons name={'logo-ionic'} size={26} style={{color:tintColor}} /> ) } }, FavoritePage:{ screen:FavoritePage, navigationOptions:{ tabBarLabel:'收藏', tabBarIcon:({tintColor,focused})=>( <Ionicons name={'logo-ionitron'} size={26} style={{color:tintColor}} /> ) } }, MyPage:{ screen:MyPage, navigationOptions:{ tabBarLabel:({tintColor,focused})=>( <Text style={{color:focused?'green':'purple',fontSize:12,alignSelf:'center'}}>我的</Text> ), tabBarIcon:({tintColor,focused})=>( <Ionicons name={'md-logo-closed-captioning'} size={26} style={{color:focused?'green':'purple'}} /> ) } }, },{ tabBarOptions:{ activeTintColor:'orange', inactiveTintColor: 'gray', }, tabStyle:{ height:100 } })) } render() { const Tab=this._tabNavigator() return ( <Tab style={styles.bottomTabBar}/> ); } } const styles = StyleSheet.create({ bottomTabBar:{ height:50 }, container: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: 'pink', }, welcome: { fontSize: 20, textAlign: 'center', margin: 10, }, });
其他页面,目前没写功能,就是展示
import React, {Component} from 'react'; import {Text, StyleSheet, View} from 'react-native'; export default class FavoritePage extends Component { render() { return ( <View style={styles.container}> <Text style={styles.welcome}> FavoritePage </Text> </View> ); } } const styles = StyleSheet.create({ container: { flex: 1, justifyContent: 'center', alignItems: 'center', backgroundColor: 'pink', }, welcome: { fontSize: 20, textAlign: 'center', margin: 10, }, });