React-native 底部导航栏(二)
1、组件安装:npm install react-native-router-flux --save
2、定义菜单图片和文字:
import React, { Component } from 'react';
import { View, Image, Text, StyleSheet,Dimensions } from 'react-native';
class TabIcon extends Component {
constructor(props){
super(props);
}
render(){
let selected=this.props.focused;
let data={
home:{
title:"首页",
icon:!selected?require("../resource/images/home.png"):require("../resource/images/home_selected.png")
},
movies:{
title:"电影",
icon:!selected?require("../resource/images/movies.png"):require("../resource/images/movies_selected.png")
},
theaters:{
title:"影院",
icon:!selected?require("../resource/images/theater.png"):require("../resource/images/theater_selected.png")
},
me:{
title:"我",
icon:!selected?require("../resource/images/me.png"):require("../resource/images/me_selected.png")
}
}
let param=data[this.props.navigation.state.key];
return <View style={styles.tabbarContainer}>
<Image style={{ width: 25, height: 25,resizeMode:'contain' }} source={param.icon} />
<Text style={[styles.tabbarItem,selected&&{color:'#F08519'}]}>{param.title}</Text>
</View>
}
}
const styles = StyleSheet.create({
tabbarContainer:{
flex:1,
alignItems:"center",
justifyContent:"center",
width:Dimensions.get('window').width/4
},
tabbarItem:{
marginTop:5,
textAlign:"center"
}
});
module.exports = TabIcon;
- 判断菜单是否被选中this.props.focused在老版本的react-native-router-flux使用this.props.selected;
- 取当前菜单this.props.navigation.state.key在老版本的react-native-router-flux使用this.props.sceneKey
3、定义底部导航栏:
import React, { Component } from 'react';
import { Provider } from 'react-redux';
import PropTypes from 'prop-types';
import {
View,
Text,
BackAndroid,
StyleSheet
} from 'react-native';
import { Scene, Router, TabBar, Modal, Schema, Actions, Reducer, ActionConst } from 'react-native-router-flux';
import { connect } from 'react-redux';
import LoginPage from './modules/auth/containers/loginPage';
import HomeIndex from './modules/home/containers/indexPage';
import TabIcon from './common/tabIcon';
class AppRoot extends Component {
static propTypes = {
dispatch: PropTypes.func
}
constructor(props) {
super(props);
}
createReducer(params) {
const defaultReducer = Reducer(params);
return (state, action) => {
this.props.dispatch(action);
return defaultReducer(state, action);
};
}
onExitApp(){
BackAndroid.exitApp();
return true;
}
render() {
return (
<Router onExitApp={this.onExitApp}
createReducer={ this.createReducer.bind(this) }
scenes={ scenes }
>
</Router >
)
}
}
const styles = StyleSheet.create({
tabBarStyle: {
backgroundColor: '#fff',
height:64
},
tabBarSelectedItemStyle: {
backgroundColor: '#fff'
},
titleStyle: {
color: '#fff'
},
})
const scenes = Actions.create(
<Scene key="root" hideNavBar={true}>
<Scene key="login" component={LoginPage} title="登录" hideNavBar={true} />
<Scene key="tabbar"
initial
tabs={true}
tabBarPosition="bottom"
showLabel={false}
tabBarStyle={styles.tabBarStyle}
tabBarSelectedItemStyle={styles.tabBarSelectedItemStyle}
titleStyle={styles.titleStyle}>
<Scene key="home"
hideNavBar={true}
component={HomeIndex}
icon={TabIcon}
titleStyle={styles.titleStyle}/>
<Scene key="movies"
hideNavBar={true}
component={HomeIndex}
icon={TabIcon}
titleStyle={styles.titleStyle} />
<Scene key="theaters"
hideNavBar={true}
component={HomeIndex}
icon={TabIcon}
titleStyle={styles.titleStyle} />
<Scene key="me"
hideNavBar={true}
component={LoginPage}
icon={TabIcon}
titleStyle={styles.titleStyle} />
</Scene>
</Scene>
)
export default connect()(AppRoot);
由于此示例基于redux,为完整项目结构,还需做以下处理:
- 定义dispatch
import PropTypes from 'prop-types';
...
class AppRoot extends Component {
static propTypes = {
dispatch: PropTypes.func
}
...
}
- 使用connect连接React组件
export default connect()(AppRoot);
GIT源码地址:react-native-demo 分支名称:tabbar
请查看原文:https://www.jianshu.com/p/ab7eb90034fd
React-native 底部导航栏(二)的更多相关文章
- React Native 底部导航栏
首先安装:npm install react-native-tab-navigator 然后再引入文件中 import TabNavigator from 'react-native-tab ...
- [RN] React Native 自定义导航栏随滚动渐变
React Native 自定义导航栏随滚动渐变 实现效果预览: 代码实现: 1.定义导航栏 NavPage.js import React, {Component} from 'react'; im ...
- React Native自定义导航栏
之前我们学习了可触摸组件和页面导航的使用的使用: 从零学React Native之09可触摸组件 - 从零学React Native之03页面导航 - 经过之前的学习, 我们可以完成一个自定义导航栏了 ...
- react native底部tab栏切换
1.安装tab栏插件 npm i react-native-tab-navigator --save 2.引入对应的组件和tab插件 import { Platform, StyleSheet, Te ...
- React Native 之导航栏
一定要参考官网: https://reactnavigation.org/docs/en/getting-started.html 代码来自慕课网:https://www.imooc.com/cour ...
- React Native(四)——顶部以及底部导航栏实现方式
效果图: 一步一步慢慢来: 其实刚入手做app的时候,就应该做出简单的顶部以及底部导航栏.无奈又在忙其他事情,导致这些现在才整理出来. 1.顶部导航栏:react-native-scrollable- ...
- 二、Fragment+RadioButton实现底部导航栏
在App中经常看到这样的tab底部导航栏 那么这种效果是如何实现,实现的方式有很多种,最常见的就是使用Fragment+RadioButton去实现.下面我们来写一个例子 首先我们先在activi ...
- TextView+Fragment实现底部导航栏
前言:项目第二版刚上线没多久,产品又对需求进行了大改动,以前用的是左滑菜单,现在又要换成底部导航栏,于是今天又苦逼加班了.花了几个小时实现了一个底部导航栏的demo,然后总结一下.写一篇博客.供自己以 ...
- Android 修改底部导航栏navigationbar的颜色
Android 修改底部导航栏navigationbar的颜色 getWindow().setNavigationBarColor(Color.BLUE); //写法一 getWindow().set ...
随机推荐
- 作业要求20191010-3 alpha week 1/2 Scrum立会报告+燃尽图 01
此作业要求参见:https://edu.cnblogs.com/campus/nenu/2019fall/homework/8746 一.小组情况组长:贺敬文组员:彭思雨 王志文 位军营 杨萍队名:胜 ...
- note:memcache 調試遇到的一些問題
1. gdb調試時提示:<value optimized out> ,原因是memcache的編譯选项做了优化,修改configure中CFLAGS中的-O3为-O0,可以解决gdb调试过 ...
- IP处理模块IPy
#安装IPy模块#pip install IPy #from IPy import IPip_s = input('please input an IP or net-range:')#192.168 ...
- Edge Detection
Edge Detection Time Limit: 1000MS Memory Limit: 10000K Total Submissions: 22604 Accepted: 5311 ...
- track-by的使用
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...
- Android之View的绘制流程
本篇文章会从源码(基于Android 6.0)角度分析Android中View的绘制流程,侧重于对整体流程的分析,对一些难以理解的点加以重点阐述,目的是把View绘制的整个流程把握好,而对于特定实现细 ...
- deepClone deepCompare
一.深度复制 // 深度复制 function deepClone(datas) { if (typeof datas !== 'object' || datas === null) return d ...
- leetcode 135分发糖果
这是一道hard题,不好想,但最后还是想出来了,私以为还是根据一些思想方法自己想出来做法印象比较深刻,其次看人家的做法思想自己写代码,其次看代码理解默写,其次直接抄代码: 首先,给每个孩子都发一个糖果 ...
- LoadRunner参数化使用mysql数据源
因为默认是没有mysql驱动的,因此需要在网上下载一个mysql驱动 1. 在网上下载一个是MYSQL数据库的ODBC驱动程序:mysql-connector-odbc-3.51.20-win32.e ...
- Windows监控——性能指标详解(转)
http://blog.csdn.net/yiqin3399/article/details/51730106