之前寫過一個關於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: {
但是現在去用的就是tabBarLabel,這跟react-navigation的版本有關
label: `xxx`,
icon: ({tintColor}) => (
<Image
source={require(`../images/xxx.png`)}
style={[{tintColor: tintColor},styles.icon]}
/>
),
},
效果如下:
屬性
除了上面提到的屬性,接下來介紹一下其他可能會用到的屬性。
標準的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感興趣,歡迎關注我的公眾號,加入我們的討論群: