React Navigation 导航栏样式调整+底部角标消息提示
五一佳节匆匆而过,有人选择在外面看人山人海,有人选择宅在家中度过五一,也有人依然坚守在第一线,致敬!
这是坚持学习react-native
的第二篇文章,可能会迟到,但是绝不会缺席,这篇要涉及到的是react-navigation
,也是rn社区主推的一个导航库。
网上关于react-navigation
的基本使用也是一抓一大把,这里对于它的使用不做过多介绍,主要记录使用过程中的其他问题。
因为android 和iOS 手机的不同,导航栏的显示也不太一样,而这篇文章会尽量的配置属性,让两端的导航栏样式、页面跳转的动画保持一致,同时还会介绍底部导航栏添加角标的方法。
这里使用的是3.9.1版本,网上好多文章是2.x版本的,用法基本大同小异。
android 导航栏标题居中适配
默认情况下,iOS的标题居中显示,而android的则不!!!
解决:createStackNavigator
的defaultNavigationOptions
属性里配置textAlign
和flex
const AppStackNavigator = createStackNavigator({
HomeScreen: {screen: HomeScreen},
RainScreen: {screen: RainScreen}
},{
defaultNavigationOptions:{
...
headerTitleStyle: {
...
textAlign: "center", //用于android 机型标题居中显示
flex:1
}
}
})
注:android机型标题默认不居中,textAlign
和flex
的属性配置用于android机型标题居中显示。
在这种情况下,如果配置了headerLeft
或者headerRight
属性,会出现标题偏移的现象。
直接在defaultNavigationOptions
里配置空view的headerLeft
和headerRight
defaultNavigationOptions:{
...
headerTitleStyle: {
...
textAlign: "center", //用于android 机型标题居中显示
flex:1,
},
headerRight: <View/>,
headerLeft: <View/>
}
这时候标题居中,同时可以在各自的页面里面去重写headerLeft
的样式。
android 导航栏去除阴影样式
android的导航栏还有阴影的样式,添加elevation
设置阴影的偏移量
defaultNavigationOptions:{
headerStyle:{
backgroundColor:"#fff",
elevation:0.5
},
...
}
至此的导航栏的效果跟iOS基本保持一致。
android 页面跳转动画,自右向左打开
默认的android页面跳转是自下而上打开页面,而要与iOS的保持一致的自右向左,配置transitionConfig
属性。
const AppStackNavigator = createStackNavigator({
HomeScreen: {screen: HomeScreen},
...
},{
defaultNavigationOptions:{
...
},
transitionConfig: () => ({
screenInterpolator: (sceneProps) => {
return StackViewStyleInterpolator.forHorizontal(sceneProps)
},
}),
})
底部导航添加消息角标
有时候我们会遇到这样的需求,在底部导航处添加消息的角标,提醒用户阅读的。
在tabBarIcon
的属性里直接添加图标显示的,这里的msg
变量数值是全局的,只做演示使用,实际项目里可以根据接口返回数据,可以搭配mobx 一起使用。
const rootTab = createBottomTabNavigator({
...
info: {
screen: InfoStack,
navigationOptions: {
tabBarLabel: "消息",
tabBarIcon: ({focused, tintColor}) => {
let icon = focused ?
require('../resources/img/mine_icon_message_selected.png') :
require('../resources/img/mine_icon_message_default.png');
return <View>
{
msg > 0 ?
<View style={{
width:12,
height:12,
justifyContent:"center",
position: 'absolute',
zIndex: 9,
backgroundColor: "#FB3768",
borderRadius:6,
right:0,
top:-2,
}}>
<Text style={[{fontSize:10, color:"#fff", textAlign:"center",}]}>{msg}</Text>
</View> : null
}
<Image source={icon} style={{width: 34, height: 26}}/>
</View>
}
}
}
},{
...
defaultNavigationOptions: ({navigation, screenProps}) => ({
tabBarOnPress: (obj) => {
//点击的时候清除消息
const {routeName} = obj.navigation.state;
if (routeName === "info") {
msg = 0
}
obj.navigation.navigate(obj.navigation.state.key)
}
})
})
以上几点是在react-navigation
的使用过程中遇到的问题以及解决方法,相关代码已经传到了github上https://github.com/taixiang/reactNativeDemo,仅供参考,如果有更好的方式 欢迎一起学习研究。
欢迎关注我的个人博客:https://www.manjiexiang.cn/
更多精彩欢迎关注微信号:春风十里不如认识你
一起学习,一起进步,欢迎上车,有问题随时联系,一起解决!!!
React Navigation 导航栏样式调整+底部角标消息提示的更多相关文章
- Bootstrap -- 导航栏样式、分页样式、标签样式、徽章样式
Bootstrap -- 导航栏样式.分页样式.标签样式.徽章样式 1. 使用图标的导航栏 使用导航栏样式: <!DOCTYPE html> <html> <head&g ...
- 微信小程序------导航栏样式、tabBar导航栏
一:导航栏样式设置 小程序的导航栏样式在app.json中定义. 这里设置导航,背景黑色,文字白色,文字内容测试小程序 app.json内容: { "pages":[ " ...
- 微信小程序入门四: 导航栏样式、tabBar导航栏
实例内容 导航栏样式设置 tabBar导航栏 实例一:导航栏样式设置 小程序的导航栏样式在app.json中定义. 这里设置导航,背景黑色,文字白色,文字内容测试小程序 app.json内容: { & ...
- React-Native 之 GD (二)自定义共用导航栏样式
1.自定义导航栏样式 步骤一:从效果图中可以看出,导航栏的样式都差不多,因为我们前面已经设置了 Navigator ,这边的话我们还需要自定义 Navigator 的样式,可以看到所有的 Naviga ...
- React实现顶部固定滑动式导航栏(导航条下拉一定像素时显示原导航栏样式)
摘要 基于react的框架开发一个顶部固定滑动式的酷炫导航栏,当导航栏置顶时,导航栏沉浸在背景图片里:当鼠标滑动滚轮时,导航栏固定滑动并展示下拉样式. JS部分 相关技术栈:react.antd.re ...
- CARDS主题 & 导航栏样式修改
每个人对于主题样式的感觉是不一样的,譬如字体大小,间距,高宽,距离,颜色等,我们可以一定程度内很直观地去修改主题的某些样式. 首先,在浏览器中利用开发者工具进行调试,找到我们所要改动的那部分结构,写入 ...
- iOS设置导航栏样式(UINavigationController)
//设置导航栏baritem和返回baiitem样式 UIBarButtonItem *barItem = [UIBarButtonItem appearance]; //去掉返回按钮上的字 [bar ...
- Android仅2步实现 滚粗 汉堡导航栏效果~ 全新底部导航交互(滑动隐藏)
本文同步自wing的地方酒馆 布吉岛大家有木有看这一篇文章,再见,汉堡菜单,我们有了新的 Android 交互设计方案 本库下载地址:https://github.com/githubwing/Bye ...
- (七十)Xcode5及以上对于状态栏和导航栏样式的设定方法
[状态栏] 在Xcode5以前,状态栏是通过UIApplication单例来管理的,而在此后,默认情况下状态栏通过控制器来管理,而且如果控制器有NavigationController,那么设置状态栏 ...
随机推荐
- 百度PaddlePaddle:
百度正式发布PaddlePaddle深度强化学习框架PARL 近日,百度PaddlePaddle正式发布了深度强化学习框架 PARL,同时开源了基于该框架的.在 NeurIPS 2018 强化学习赛事 ...
- 【转】Java 内部类总结
Java内部类 一. 含义 在Java编程语言里,程序是由类(class)构建而成的.在一个类的内部也可以声明类,我们把这样的类叫做内部类. 二. 作用 实现了更好的封装,我们知道,普通类(非内部类) ...
- Codechef Chef Cuts Tree
该思博的时候就思博到底,套路的时候不能再套路的一道题 首先我们将联通块的大小平方和进行转化,发现它就等价于连通点对数,而这个可以转化为连接两点的边数(距离)和 所以我们考虑第\(i\)天时,一个点对\ ...
- [LeetCode] 644. Maximum Average Subarray II 子数组的最大平均值之二
Given an array consisting of n integers, find the contiguous subarray whose length is greater than o ...
- oracle--oracle18C环境配置(一)
一,硬件配置检查 使用以下命令确定服务器上的物理RAM大小: # grep MemTotal /proc/meminfo 如果系统中安装的物理RAM的大小小于所需的大小,则必须先安装更多内存,然后再继 ...
- OsharpNS轻量级.net core快速开发框架简明入门教程-Osharp.Permissions使用
OsharpNS轻量级.net core快速开发框架简明入门教程 教程目录 从零开始启动Osharp 1.1. 使用OsharpNS项目模板创建项目 1.2. 配置数据库连接串并启动项目 1.3. O ...
- Nginx配置max_fails fail_timeout
目的: 通过配置max_fails.fail_timeout来达到当一台服务器访问出现非200时可以跳转到另一台服务器 操作: 配置nginx.conf文件 具体配置如下 upstream Site ...
- W5500封装
W5500是韩国一款集成全硬件 TCP/IP 协议栈的嵌入式以太网控制器,W5500同时也是一颗工业级以太网控制芯片,最近发现我们国内也有和W5500 芯片一样芯片 介绍给大家 如下图:
- java,string和list,list和set相互转换
list转string String str= String.join("','", list); list转set Set<String> set = new Has ...
- Windows安装Nginx需要注意的地方
在使用 Nginx 之前,首先要三连问,它是什么?用来做什么?为什么用它? 这篇文章很好的解答了上面的问题,并补充了什么是正向代理和反向代理以及区别的知识 https://www.cnblogs. ...