RN-常用第三方组件之react-native-scrollable-tab-view

react-native-scrollable-tab-view 标签导航,可以点击切换,每个 tab 可以有自己的 ScrollView,点击切换的时候可以维护自己的滚动方向。

(以上摘取自网络)
下面记录下自己的使用
地址:https://github.com/skv-headless/react-native-scrollable-tab-view

使用:

npm install react-native-scrollable-tab-view --save
render() {
        return (
            <ScrollableTabView style={{marginTop:20}}
                renderTabBar={() => <DefaultTabBar tabNames={this.state.tabNames}/>}//忽略这一行,为默认的样式

                tabBarPosition='overlayBottom'//top、bottom、overlayTop、overlayBottom顶部底部悬浮
                onChangeTab= {(obj)=>{console.log('选中了:'+obj.i)}}//切换后调用此方法
                onScroll={(postion)=>{console.log('postion:'+postion)}}//正在滚动调用 0到length-1
                locked={false}//手指是否能拖动视图,默认为false(表示可以拖动)
                initialPage={0}//初始化时被选中的Tab下标,默认是0(即第一页)

                tabBarBackgroundColor="red"//背景色
                tabBarActiveTextColor="blue"//选中的tab的文字颜色
                tabBarInactiveTextColor="yellow"//没有选中的tab的文字颜色
                tabBarTextStyle={{fontSize:17}}//tab的字体的style
                scrollWithoutAnimation={false}//设置“点击”Tab时,视图切换是否有动画,默认为false(即:有动画效果)

            >
                {/*{每个被包含的子视图必须使用tabLabel属性,表示对应Tab显示的文字}*/}
                {/*{每个被包含的子视图必须使用tabLabel属性,表示对应Tab显示的文字}*/}
                {/*{每个被包含的子视图必须使用tabLabel属性,表示对应Tab显示的文字}*/}

                <View tabLabel='Tab1' style={styles.container}>

                    <Text>1</Text>

                </View>

                <View tabLabel='Tab2' style={styles.container}>

                    <Text>2</Text>

                </View>

                <View tabLabel='Tab3' style={styles.container}>

                    <Text>3</Text>

                </View>

                <View tabLabel='Tab4' style={styles.container}>

                    <Text>4</Text>

                </View>

                <View tabLabel='Tab5' style={styles.container}>

                    <Text>5</Text>

                </View>

                <View tabLabel='Tab6' style={styles.container}>

                    <Text>6</Text>

                </View>



            </ScrollableTabView>
        );

默认样式如图

当然也可以自定义tabbar

renderTabBar  这个属性是一个方法,传如Component即可

自定义的Component代码如下:

'use strict';

import React, {Component} from 'react';

import {
    StyleSheet,
    View,
    TouchableOpacity,
    Text
} from 'react-native';


class DefaultTabBar extends Component {

    propTypes = {
        goToPage: React.PropTypes.func, // 跳转到对应tab的方法
        activeTab: React.PropTypes.number, // 当前被选中的tab下标
        tabs: React.PropTypes.array, // 所有tabs集合,暂未发现有何作用,暂未用到

        tabNames: React.PropTypes.array, // 保存Tab名称,由上一级传入数组
    };



    setAnimationValue({value}) {
        console.log('setAnimationValue'+value);
    }

    componentDidMount() {
        // Animated.Value监听范围 [0, tab数量-1]
        this.props.scrollValue.addListener(this.setAnimationValue);
    }

//创建tabbar
    renderTabOption(tab, i) {
        let color = this.props.activeTab == i ? "red" : "black"; // 判断i是否是当前选中的tab,设置不同的颜色

        return (
            <TouchableOpacity onPress={()=>this.props.goToPage(i)} style={styles.tab}>
                <View style={styles.tabItem}>//更复杂的tabbr在此处编码,这里简单的显示了tabbar的名字而已
                    <Text style={{color: color}}>
                        {this.props.tabNames[I]}
                    </Text>
                </View>
            </TouchableOpacity>
        );
    }

    render() {
        //接收由上一级传过来的数组,然后遍历数组添加tabbar
        console.log('tabNames'+this.props.tabNames);
        return (
            <View style={styles.tabs}>
                {this.props.tabNames.map((tab, i) => this.renderTabOption(tab, i))}
            </View>
        );
    }
}

const styles = StyleSheet.create({
    tabs: {
        flexDirection: 'row',
        height: 50,
    },

    tab: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
    },

    tabItem: {
        flexDirection: 'column',
        alignItems: 'center',
    },
});


export default DefaultTabBar;

使用方法前面的代码里面已经有了

<ScrollableTabView style={{marginTop:20}}
                renderTabBar={() => <DefaultTabBar tabNames={this.state.tabNames}/>}//自定义tabbar样式

              ...

            >

效果如图:

demo:https://github.com/chjwrr/ThirdPartyToolTest

DDBDBB7C-A4EA-4D92-9D72-A3FCB039FF2E.png
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 194,761评论 5 460
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 81,953评论 2 371
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 141,998评论 0 320
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 52,248评论 1 263
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 61,130评论 4 356
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 46,145评论 1 272
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 36,550评论 3 381
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 35,236评论 0 253
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 39,510评论 1 291
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 34,601评论 2 310
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 36,376评论 1 326
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 32,247评论 3 313
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 37,613评论 3 299
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 28,911评论 0 17
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 30,191评论 1 250
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 41,532评论 2 342
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 40,739评论 2 335

推荐阅读更多精彩内容