React Native(簡單精緻的底部導航欄):使用react-native-tab-navigator實現底部導航欄
阿新 • • 發佈:2018-11-15
實現效果如下:
點選選項卡可以切換並且改變上面頁面的顏色、選中圖示的顏色、圖示
首先需要安裝:
npm install react-native-tab-navigator --save
然後在需要做導航欄的檔案引入:
import TabNavigator from 'react-native-tab-navigator'
現在可以開始開發導航欄了,這是我做的這個例子的完整程式碼:
import React, {Component} from 'react'; import {StyleSheet, View,Text,Image} from 'react-native'; import TabNavigator from 'react-native-tab-navigator' export default class App extends Component<Props> { /*初始化state*/ constructor(props){ super(); this.state={ selectedTab:'tb_msg', } } /** * 公共元件方法 * @param selectedTab 選中的tab * @param title * @param icon * @param selectedIcon * @param imageStyle 選中時渲染圖示的顏色 * @param mark 角標 * @param viewContent 頁面內容 * @returns {*} */ tabNavigatorItems(selectedTab,title,icon,selectedIcon,imageStyle,mark,viewContent){ return ( <TabNavigator.Item selected={this.state.selectedTab === selectedTab } title={title} renderIcon={()=> <Image style={styles.myImage} source={icon}/> } renderSelectedIcon={()=> <Image style={[styles.myImage,{tintColor:imageStyle}]} source={selectedIcon}/> } badgeText={mark} onPress={()=> this.setState({selectedTab:selectedTab}) }> <View style={{flex:1}}><Text>{viewContent}</Text></View> </TabNavigator.Item> ) } render() { return ( <View style={styles.container}> <TabNavigator> {this.tabNavigatorItems('tb_msg',"訊息",require('./images/msg.png'),require("./images/selected_msg.png"),'#ffe09a',"1","訊息頁面內容")} {this.tabNavigatorItems('tb_contacts',"聯絡人",require('./images/contacts.png'),require("./images/selected_contacts.png"),'#65bb74',"","聯絡人頁面內容")} {this.tabNavigatorItems('tb_watch',"看點",require('./images/wacth.png'),require("./images/selected_watch.png"),'#6ebef3',"","看點頁面內容")} {this.tabNavigatorItems('tb_dynamic',"動態",require('./images/dynamic.png'),require("./images/selected_dynamic.png"),'#622193',"","動態頁面內容")} </TabNavigator> </View> ); } } const styles = StyleSheet.create({ container: { flex: 1, backgroundColor: '#F5FCFF', }, myImage:{ width:22, height:22, } });
下面是元件的屬性和描述
TabNavigator props:
prop | default | type | description |
---|---|---|---|
sceneStyle | inherited | object (style) | 場景樣式,即Tab頁容器的樣式,可按View的style設定 |
tabBarStyle | inherited | object (style) | TabBar的樣式,基本也可按照普通的style寫法進行設定 |
tabBarShadowStyle | inherited | object (style) | TabBar陰影的樣式,不過對於扁平化的設計,這個屬性應該用處不大 |
hidesTabTouch | false | boolean | bool型別,即是否隱藏Tab按鈕的按下效果 |
TabNavigator.Item props:
prop | default | type | description |
---|---|---|---|
renderIcon | none | function | 即圖示,但為function型別,所以這裡需要用到Arrow Function |
renderSelectedIcon | none | function | 選中狀態的圖示,非必填,也是function型別 |
badgeText | none | string or number | 即Tab右上角的提示文字,可為String或Number,類似QQ中Tab右上角的訊息提示,非必填 |
renderBadge | none | function | 提示角標渲染方式,function型別,類似render的使用,非必填 |
title | none | string | 標題,String型別,非必填 |
titleStyle | inherited | style | 標題樣式,style型別,非必填 |
selectedTitleStyle | none | style | 選中標題樣式,style型別,非必填 |
tabStyle | inherited | style | styling for tab |
selected | none | boolean | bool型,是否選中狀態,可使用setState進行控制,預設false |
onPress | none | function | 即點選事件的回撥函式,這裡需要控制的是state |
allowFontScaling | false | boolean | bool型,是否允許字型縮放,預設false |