1. 程式人生 > >React Native(簡單精緻的底部導航欄):使用react-native-tab-navigator實現底部導航欄

React Native(簡單精緻的底部導航欄):使用react-native-tab-navigator實現底部導航欄

實現效果如下:

          點選選項卡可以切換並且改變上面頁面的顏色、選中圖示的顏色、圖示

 

首先需要安裝:

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