之前寫過一個關於StackNavigator的文章,如果感興趣的同學可以翻一下我之前的文章(連結在文章末尾)。TabNavigator是我要介紹的關於react-navigation的第二個元件。
安裝以及相關問題
首先要想使用react-navigation,需要先進行安裝:
npm install --save react-navigation複製程式碼
簡單示例
在這裡我先寫一個簡單的示例,下面會不斷的擴充套件介紹:
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
View
} from 'react-native';
import Home from './Home'
import { TabNavigator } from 'react-navigation';
import Second from './Second'
const TestTab = TabNavigator({
Home: { screen: Home },
Second: { screen: Second },
});
AppRegistry.registerComponent('TestTab', () => TestTab);複製程式碼
Home和Second是我隨便寫的兩個簡單介面,這裡不再多說了。只需要一個const TestTab = TabNavigator({
Home: { screen: Home },
Second: { screen: Second },
});
就可以實現一個TabNavigator:
option
看過我之前寫的StackNavigator的文章都知道,可以通過設定option改變Navigator的樣式。
現在試一下:
import React, { Component } from 'react';
import {
AppRegistry,
StyleSheet,
Text,
Image,
View
} from 'react-native';
import Home from './Home'
import { TabNavigator } from 'react-navigation';
import Second from './Second'
const TestTab = TabNavigator({
Home: { screen: Home,
navigationOptions: {
tabBarLabel: '第一個',
tabBarIcon: ({tintColor}) => (
<Image
source={require('./images/home.png')}
style={[{tintColor: tintColor},styles.icon]}
/>
),
}
},
Second: { screen: Second,
navigationOptions: {
tabBarLabel: '第二個',
tabBarIcon: ({tintColor}) => (
<Image
source={require('./images/second.png')}
style={[{tintColor: tintColor},styles.icon]}
/>
),
}
},
},
{
animationEnabled: true, // 切換頁面時是否有動畫效果
tabBarPosition: 'top', // 顯示在底端,android 預設是顯示在頁面頂端的
swipeEnabled: true, // 是否可以左右滑動切換tab
backBehavior: 'none', // 按 back 鍵是否跳轉到第一個Tab(首頁), none 為不跳轉
tabBarOptions: {
activeTintColor: '#ff8500', // 文字和圖片選中顏色
inactiveTintColor: '#999', // 文字和圖片未選中顏色
showIcon: true, // android 預設不顯示 icon, 需要設定為 true 才會顯示
indicatorStyle: {
height: 0 // 如TabBar下面顯示有一條線,可以設高度為0後隱藏
},
style: {
backgroundColor: '#fff', // TabBar 背景色
// height: 44
},
labelStyle: {
fontSize: 10, // 文字大小
},
},
});
const styles = StyleSheet.create({
icon: {
width: 26,
height: 26,
},
});
AppRegistry.registerComponent('TestTab', () => TestTab);複製程式碼
具體配置屬性的含義,可以參照後面的註釋。
這裡要注意:之前的版本設定tabbar的標題和圖片用的是:
tabBar: { label: 'xxx', icon: ({tintColor}) => ( <Image source={require('../images/xxx.png')} style={[{tintColor: tintColor},styles.icon]} /> ), },
但是現在去用的就是tabBarLabel,這跟react-navigation的版本有關
效果如下:
屬性
除了上面提到的屬性,接下來介紹一下其他可能會用到的屬性。
標準的TabNavigator的建構函式有兩個引數:
TabNavigator(RouteConfigs, TabNavigatorConfig)複製程式碼
TabNavigatorConfig
- tabBarComponent - tab bar的元件
- tabBarPosition -bar的位置,是在上面還是在下面,上述demo都是在上面
- swipeEnabled -是否支援左右滑動
- animationEnabled - 是否有動畫
- lazy - 懶載入
- tabBarOptions這個看下面的詳解
- initialRouteName - 第一次進入的介面
- order - 介面順序
- paths - 可以設定跳轉順序
- backBehavior - 按 back 鍵是否跳轉到第一個Tab(首頁), none 為不跳轉
tabBarOptions(TabBarBottom)
- activeTintColor - 啟用版塊的顏色
- activeBackgroundColor - 啟用版塊的背景顏色
- inactiveTintColor - 非啟用版塊的顏色
- inactiveBackgroundColor - 非啟用版塊的背景顏色
- showLabel -是否顯示label
- style - tab bar的style
- labelStyle - label的style
- tabStyle - tab的style
tabBarOptions(TabBarTop)
- activeTintColor - 啟用版塊的顏色
- activeBackgroundColor - 啟用版塊的背景顏色
- inactiveTintColor - 非啟用版塊的顏色
- inactiveBackgroundColor - 非啟用版塊的背景顏色
- showIcon - 是否顯示icon
- showLabel -是否顯示label
upperCaseLabel - label是否全部大寫,預設是true
pressColor - 點選顏色 (Android >= 5.0 only)
pressOpacity - 點選透明度(iOS and Android < 5.0 only)
scrollEnabled - 是否使用scrollable - tabStyle - tab的style
- indicatorStyle - 指示器style
- labelStyle - label的style
- iconStyle - icon的style
- style - tab bar的style
Screen Navigation Options
- title 標題
- tabBarVisible是否可見
- tabBarLabel每一個tab的名稱
- tabBarIcon 每一個tab的icon
總結
這是關於TabNavigator的所有介紹,關於上面介紹的引數,我也是翻譯的官網上的,之後還會介紹DrawerNavigator,但也許不是下一篇文章,需要的朋友也可以給我留言。
之前文章合集:
Android文章合集
iOS文章合集
ReactNative文章合集
如果你也做ReactNative開發,並對ReactNative感興趣,歡迎關注我的公眾號,加入我們的討論群: