Loading [MathJax]/jax/output/CommonHTML/config.js
前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >React-native-scrollable-tab-view详解

React-native-scrollable-tab-view详解

作者头像
谦谦君子修罗刀
发布于 2018-05-02 02:53:20
发布于 2018-05-02 02:53:20
4.4K00
代码可运行
举报
运行总次数:0
代码可运行

前言:他方山上有佳石,可以用来琢玉器。只有解决了一个红屏,才有机会遇见另一个红屏。只有解决了一个困难,才有机会遇到其他的困难。O(∩_∩)O~生命不息,奋斗不止。

React Native中有许多第三方用于封装tabBar的库,当然也有官方提供的。React-native-scrollable-tab-view是一款非常实用的第三方库。放于界面之上可以实现一个界面中子界面的切换效果,置于界面之下可实现功能模块间的切换,通常用于封装自定义的tabBar。

安装

  • 在终端输入命令 npm i react-native-scrollable-tab-view --save 这条命令中--save的目的是让它写入到package.json文件中去。如若在安装的过程中提示没有权限安装等信息,请在这条命令的后面加上 --force强制安装。
  • 确认安装 打开package.json文件,如若看到下图所示的效果,则说明安装正确。

属性

  • renderTabBar:用于渲染TabBar。添加该属性,需要在引入组件之时加上它的子组件。系统提供两种方式,DefaultTabBar和ScrollableTabBar。DefaultTabBar表示Tab.item会平分水平方向上的空间,而ScrollableTabBar表示所有的tabBar.item的长度将会超过屏幕宽度,但是当滚动屏幕之时可以显示出来。当然我们也可以自定义它的模式。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
//引入
import ScrollableTabView, {DefaultTabBar, ScrollableTabBar} from 'react-native-scrollable-tab-view';

//在render函数中
 render() {
        return (
            <ScrollableTabView
               //渲染成ScrollableTabBar模式 
                // renderTabBar={() => <ScrollableTabBar/>}

              //渲染成自定义的模式
                renderTabBar={() => <MyTabBar tabNames={tabNames} tabIconNames={tabIconNames}/>}
     >
<ScrollableTabView/>
  • tabBarPosition:表示TabBar的位置。一共有四个取值:top(放在界面上方)、bottom(放在界面底部)、overlayTop(有悬浮效果在上方)、overlayBottom(有悬浮效果在下方)
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
tabBarPosition='bottom'
效果图.gif
效果图.gif
  • onChangeTab:切换界面的时候会调用该方法,该属性中包含一个参数,它是一个object对象,这个对象有两个参数,i表示被选中的下标,ref表示被选中的对象。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
onChangeTab = {(obj)=>{console.log('被选中的下标:'+obj.i);}}
  • onScroll:视图滑动时调用,该属性会传递一个Float类型的数字,范围是[0,tab的数量-1]
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 onScroll={
                    (position) => {
                        console.log('滑动时的位置:' + position);
                    }
                }
  • locked:手指是否能拖动,默认为false(可拖动),如为true则表示只能通过点击tab来切换视图。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 locked={false}
  • initialPage:初始化时被选中的下标,默认为0
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
initialPage={0}
  • page:设置选中指定的tab
  • children:表示所有子视图的数组
  • tabBarUnderlineColor:设置Tab选中时下方横线的颜色。注意,该属性只是在系统提供的DefaultTabBar和ScrollableTabBarTab状态下才有效果。
代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
 renderTabBar={() => <ScrollableTabBar/>}
 tabBarUnderlineColor={'red'}
  • tabBarBackgroundColor:整个tabBar的背景颜色。
  • tabBarActiveTextColor/tabBarInactiveTextColor: 选中/未选中的tabBar的文字颜色
  • tabBarTextStyle:提供一个object对象的参数,用于设置文字的样式,如字体字号
  • style:这是所有view都拥有的属性
  • scrollWithoutAnimation:切换tab时,是否有动画默认是false,即没有。
  • prerenderingsiblingsNumber:默认为0,表示预渲染视图的个数,为0表示只渲染当前页。

实例

1、构建项目 为了使iOS端和android端能更和谐的使用一套代码。先创建一个入口文件取名为APP.js。此时,index.iOS.js和index.android.js文件就只需要引入APP.js文件即可。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */
//iOS端和安卓端公用一套代码
import React, { Component } from 'react';
import {
    AppRegistry,
    StyleSheet,
    Text,
    View
} from 'react-native';
import App from './APP'
export default class babyShow extends Component {
  render() {
    return (
        <App/>
    );
  }
}

AppRegistry.registerComponent('babyShow', () => babyShow);

2、封装自定义的TabBar。取名为MyTabBar.js 封装时要注意,有三个属性是系统传入的。即goToPage、activeTab、tabs。所以要先在规定属性类型时先写上这三个属性。其他的属性则可以自己选择。 在使用tabbar的时候,通常会用到图片。这里可以使用第三方的图库。 安装方法如下: npm install react-native-vector-icons --save 安装好了之后记得一定要输入下面的命令 rnpm link 重新编译即可使用

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import Icon from 'react-native-vector-icons/Ionicons'; //这个是图标

以下是整个MyTabBar文件的全部代码。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
/**
 * Sample React Native App
 * https://github.com/facebook/react-native
 * @flow
 */

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

import Icon from 'react-native-vector-icons/Ionicons'; //这个是图标

export default class MyTabBar extends Component {
    static propTypes = {

        goToPage: React.PropTypes.func, // 跳转到对应tab的方法
        activeTab: React.PropTypes.number, // 当前被选中的tab下标
        tabs: React.PropTypes.array, // 所有tabs集合

        tabNames: React.PropTypes.array, // 保存Tab名称
        tabIconNames: React.PropTypes.array, // 保存Tab图标

    };  // 注意这里有分号


    render() {
        return (
            <View style={styles.tabs}>
                {/*遍历。系统会提供一个tab和下标 调用一个自定义的方法*/}
                {this.props.tabs.map((tab, i) => this.renderTabOption(tab, i))}
            </View>
        );
    }

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

    setAnimationValue({value}) {
        console.log('动画值:'+value);
    }

///  处理tabbar的颜色和字体及图标
    renderTabOption(tab, i) {
        let color = this.props.activeTab == i ? "#FF3399" : "#ADADAD"; // 判断i是否是当前选中的tab,设置不同的颜色
        return (
            //因为要有点击效果 所以要引入可触摸组件
            <TouchableOpacity onPress={()=>this.props.goToPage(i)} style={styles.tab} key={tab}>
                <View style={styles.tabItem}>
                    <Icon
                        
                        name={this.props.tabIconNames[i]} // 图标 调用传入的属性
                        size={30}
                        color={color}/>
                    <Text style={{color: color}}>
                        {this.props.tabNames[i]}
                    </Text>
                </View>
            </TouchableOpacity>
        );
    }


}

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

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

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

});

3、调用自定义的tabbar文件 在APP.js文件中,把属性tabNames和tabIconNames属性定义在状态机上,然后传入到属性中。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import React,{Component} from 'react';
import {
    AppRegistry,
    StyleSheet,
    Text,
    View
} from 'react-native';

import ScrollableTabView, {DefaultTabBar, ScrollableTabBar} from 'react-native-scrollable-tab-view';

import Icon from 'react-native-vector-icons/Ionicons';
import IconFont from 'react-native-vector-icons/FontAwesome';

import MyTabBar from './Common/MyTabBar';

export default class APP extends Component {
    constructor(props) {
        super(props);
        this.state = {
            tabNames: ['主页', '分类', '她他群','我的'],
            tabIconNames: ['ios-home', 'ios-grid',  'logo-buffer', 'ios-contact'],

        };
    }


    render() {
        let tabNames = this.state.tabNames;
        let tabIconNames = this.state.tabIconNames;
        return (
            <ScrollableTabView
                //renderTabBar={() => <DefaultTabBar/>}
                renderTabBar={() => <MyTabBar tabNames={tabNames} tabIconNames={tabIconNames}/>}


                tabBarPosition={'bottom'}

                onChangeTab={
                    (obj) => {
                        console.log('被选中的tab下标:' + obj.i);
                    }
                }

                onScroll={
                    (position) => {
                        console.log('滑动时的位置:' + position);
                    }
                }
                locked={false}
                initialPage={0}
                prerenderingSiblingsNumber={1}

            >
              {/*每个页面 设定四个页面*/}
                <View tabLabel="page1" style={styles.center}>
                    <Text >每一天都不同</Text>
                    <IconFont.Button name="facebook" backgroundColor="#FF3399" size={20} >
                        妲己会一直爱主人
                    </IconFont.Button>
                    <Icon name="md-alarm" size={50}></Icon>
                    <IconFont.Button name="twitter" backgroundColor="#FF3399" size={20} >
                        因为被设定成这样
                    </IconFont.Button>
                </View>

                <View tabLabel="page2" style={styles.center}>
                    <Text style={{color:'pink'}}>小乔要努力变强</Text>
                </View>
                <View tabLabel="page3" style={styles.center}>
                    <Text style={{color:'red'}}>萝莉身御姐心</Text>
                </View>

                <View tabLabel="page4" style={styles.center}>
                    <Text style={{color:'#70f3ff'}}>别靠近我,阿福不想带来不幸</Text>

                </View>


            </ScrollableTabView>
        );
    }
}

const styles = StyleSheet.create({
    container: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
        backgroundColor: '#F5FCFF',
    },
    center: {
        flex: 1,
        justifyContent: 'center',
        alignItems: 'center',
    },
    welcome: {
        fontSize: 20,
        textAlign: 'center',
        margin: 10,
    },
    instructions: {
        textAlign: 'center',
        color: '#333333',
        marginBottom: 5,
    },
});
本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2017.08.27 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
React Native之react-native-scrollable-tab-view详解
在React Native开发中,官方为我们提供的Tab控制器有两种:TabBarIOS和ViewPagerAndroid。TabBarIOS,仅适用于IOS平台 ViewPagerAndroid,仅适用于Android平台(严格来讲并不算,因为我们还需要自己实现Tab)。在项目开发中,我们优先选择一些开源兼容性比较好的第三方库,例如,react-navigation,以及本文即将说到的react-native-scrollable-tab-view(官方地址)。react-native-scrolla
xiangzhihong
2018/02/06
6.5K0
React Native之react-native-scrollable-tab-view详解
【React Native】react-native-scrollable-tab-view
一张跟内容完全关系的图 介绍 一个带有TabBar和可切换页面的控件。 在Android中可以看成是ViewPager和TabLayout的结合。 实际效果的话,就下面这样了。 官方的动图 你可以选择直接上官方Github了解怎么使用,或者继续往下看我装逼。 添加到项目中 npm install react-native-scrollable-tab-view --save 使用 基本用法 用tabLabel指定Tab名称 render() { return ( <S
Gavin-ZYX
2018/05/18
2.7K0
React Native 实现基于react-native-tab-navigator库Tab切换封装
react-native-tab-navigator是一款Tab切换的库,细心的读者可能注意到了对于TabNavigator.Item选项卡部分,代码功能上基本上是重复的,对此,我们能不能对这种有相同
xiangzhihong
2018/02/06
4.1K0
React Native 实现基于react-native-tab-navigator库Tab切换封装
React Native导航器之react-navigation使用
在上一节Navigation组件,我们使用系统提供的导航组件做了一个跳转的例子,不过其实战能力不强,这里推荐一个超牛逼的第三方库:react-navigation。在讲react-navigation之前,我们先看一下常用的导航组件。 导航控件 常见的导航主要分为三种: 1.StackNavigator :类似于普通的Navigator,屏幕上方导航栏 2.TabNavigator:obviously, 相当于iOS里面的TabBarController,屏幕下方标签栏 3.DrawerNavi
xiangzhihong
2018/02/06
12.5K0
React Native导航器之react-navigation使用
React Native 系列(九) -- Tab标签组件
前言 本系列是基于React Native版本号0.44.3写的。很多的App都使用了Tab标签组件,例如QQ,微信等等,就是切换不同的选项,显示不同的内容。那么这篇文章将介绍RN中的Tab标签组件。 Tab标签 什么是Tab标签?(ps:我是这样叫的),就拿微信来说吧,底部有4个选项卡,点击不同的按钮切换不同的内容。 在RN中有两个组件负责实现这样的效果,它们是: TabBarIOS TabNavigator TabBarIOS 和NavigatorIOS相似,看名字就知道该组件只适用于iOS,不能用于
Scott_Mr
2018/05/16
6.5K0
4. Navigation实战
本来想写一个应用redux的Navigation实战,但是发现react-native有又新的更新,新手怕误导大家,就直接用了别人的组件,看看怎么应用吧。本次在github找了一个别人写好的组件react-native-router-flux,主要看看怎么集成到项目里,强烈推荐研读源码,还有一个别人项目里的,感觉也不错推荐。
MasterVin
2018/08/30
8010
4. Navigation实战
React Native(四)——顶部以及底部导航栏实现方式
其实刚入手做app的时候,就应该做出简单的顶部以及底部导航栏。无奈又在忙其他事情,导致这些现在才整理出来。
全栈程序员站长
2022/07/20
3.3K0
React Native(四)——顶部以及底部导航栏实现方式
React Native自定义Button
效果: 引用文件代码: import React, { Component } from 'react'; import { AppRegistry, Image, Text,
星宇大前端
2019/01/15
1.1K0
一个简单的ReactNative demo
本人非前端,请轻喷 ReactNative版本:0.31 github:https://github.com/X-FAN/reactnativelearn
夏洛克的猫
2018/10/18
2K0
一个简单的ReactNative demo
React Native之prop-types进行属性确认
React Native已经升级到0.51.0了,版本升级很快,但是对老项目也会有一些问题,常见的就是属性找不到的问题。例如: 主要原因是随着React Native的升级,系统废弃了很多
xiangzhihong
2018/02/06
1.5K0
React Native之prop-types进行属性确认
React Native控件只TextInput
TextInput是一个允许用户在应用中通过键盘输入文本的基本组件。本组件的属性提供了多种特性的配置,譬如自动完成、自动大小写、占位文字,以及多种不同的键盘类型(如纯数字键盘)等等。 比如官网最简单的写法: import React, { Component } from 'react'; import { AppRegistry, TextInput } from 'react-native'; class UselessTextInput extends Component { construct
xiangzhihong
2018/02/05
3.7K0
React Native控件只TextInput
React Native(二):react-navigation
react-navigation是FaceBook推荐使用的一个库,用于导航效果,官方文档
Helloted
2022/06/07
2.1K0
React Native(二):react-navigation
手把手教你如何自定义 React Native 底部导航栏
如果你觉得 React Navigation 默认 Tab 组件看起来太平淡,或者想创造一些更现代的东西,那么你想法就和我一样。 在本指南中,我将向你演示如何创建自定义标签栏以并与 React Navigation 一起使用。
前端小智@大迁世界
2019/04/25
7.7K0
手把手教你如何自定义 React Native  底部导航栏
【React Native 安卓开发】----侧边栏的实现DrawerLayoutAndroid以及第三方框架react-native-side-menu的使用【第六篇】
做过安卓原生开发的童鞋们应该都做过侧边栏这个东西,而且对于开源框架SlidingMenu和android官方侧滑菜单DrawerLayout应该都不陌生。 那么今天也在这里给大家介绍一下React-Native中的侧滑菜单DrawerLayoutAndroid和第三方框架react-native-side-menu。
先知先觉
2019/01/21
6.8K0
react-native-web
如果使用了 ART,需要安装 react-art(比如,使用了 react-native-svg 来做RN端icon方案,这就是基于 react-art)
conanma
2021/11/02
3K0
基础篇章:React Native 之 View 和 Text 的讲解
(友情提示:RN学习,从最基础的开始,大家不要嫌弃太基础,会的同学请自行略过,希望不要耽误已经会的同学的宝贵时间) 从今天开始我们进入基础组件也就是一些简单控件的学习,之前写的文章貌似太正式了,我正在考虑怎么样才能写的有意思,想想挺难的,算了,写一步算一步吧。今天我们就从最简答的View和Text控件讲起。 View View其实就是UI最基础的组件,跟我们android中的View不同,它更像我们android中的LinearLayout,RN中的View是一个支持Flexbox布局、样式、一些触摸处理和
非著名程序员
2018/02/09
2.6K0
基础篇章:React Native 之 View 和 Text 的讲解
React Native 系列(八) -- 导航
前言 本系列是基于React Native版本号0.44.3写的。我们都知道,一个App不可能只有一个不变的界面,而是通过多个界面间的跳转来呈现不同的内容。那么这篇文章将介绍RN中的导航。 导航 什么是导航? 其本质就是视图之间的界面跳转,例如首页跳转到详情页。 在RN中有两个组件负责实现这样的效果,它们是: NavigatorIOS React Navigation 你可能在很多地方听说过Navigator,这个老组件会逐渐被React Navigation代替。笔者在最后也会讲解一下Navigator
Scott_Mr
2018/05/16
6.1K0
基础篇章:关于 React Native 之 Modal 组件的讲解
(友情提示:RN学习,从最基础的开始,大家不要嫌弃太基础,会的同学请自行略过,希望不要耽误已经会的同学的宝贵时间) Modal是模态视图,它的作用是可以用来覆盖 React Native中根视图的原生视图,Modal模态视图是一种覆盖包围当前内容视图的一个简单方法。 注意:如果你需要如何在您的应用程序的其余部分呈现模态的更多控制,那么可以考虑使用顶级导航(top-level Navigator)。 Modal 属性 照例,我想大家都知道我的习惯了,毕竟官网也是这个顺序,那就是在用人之前,先要了解人,毕竟疑人
非著名程序员
2018/02/09
2.5K0
基础篇章:关于 React Native 之 Modal 组件的讲解
React Native动画详解
在移动开发中,动画是提高用户体验不可缺少的一个元素。在React Native中,动画API提供了一些现成的组件:Animated.View,Animated.Text和Animated.Image默认支持动画。动画API会调用iOS或者Android的本地代码来完成这些组件的位移、大小等动画。 在React Native中,Animated创建过程如下: 创建Animated.Value,设置初始值,比如一个视图的opacity属性,最开始设置Animated.Value(0),来表示动画的开始时候,视图
xiangzhihong
2018/01/26
3.5K0
MobX 在 React Native开发中的应用
MobX 是一款精准的状态管理工具库,如果你在 React 和 React Native 应用中使用过 Flux、Alt、Redux 和 Reflux,那毫不犹豫地说,MobX 的简单性将成为你状态管
xiangzhihong
2018/01/26
12.4K0
相关推荐
React Native之react-native-scrollable-tab-view详解
更多 >
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文