自定义底部导航栏(tabBar)

前言
如果大家用过微信提供的tabBar就会发现,他的tabBar有很大的局限性。
暂且不说样式局限性了,他提供的app.json配置文件中没有function。
这也就意味着使用它提供的这个组件,你只能用于跳转页面,不能干其它的事情

我YY的

以下是代码
说明:小程序的很大异步分思想体现了封装,以提高复用性。对此,一些简单代码我也封装了,考虑到了以后维护的方便性
目录结构如下:

图片配置文件:imgURI.js(由于小程序不支持xml和读取本地json,故用js代替)

 1 var host="/img/";
 2 var arr={
 3     //各种图片地址
 4     log0:host+‘log0.png‘,
 5     log1:host+‘log1.png‘,
 6     my0:host+‘my0.png‘,
 7     my1:host+‘my1.png‘,
 8     add:host+‘add.png‘
 9 }
10 function gets(arg){
11     return arr[arg];
12 }
13  module.exports ={
14   gets:gets
15 }

页面代码:index.wxml

 1 <!--选项卡-->
 2 <view class="tabBar">
 3    <block wx:for="{{tabBar}}">
 4         <view class="tarItem" bindtap="{{item.tarFunction}}" data-index="{{index}}" >
 5             <image class="tarIco" src="{{item.tarIco}}"></image>
 6             <view class="tarTxt" >{{item.tarTxt}}</view>
 7         </view>
 8    </block>
 9 </view>
10
11 <!--选项卡对应的页面-->
12 <view class="pages1"  hidden="{{tabBar[0][‘isHidden‘]}}">
13     pages1
14 </view>
15 <view class="pages2" hidden="{{tabBar[2][‘isHidden‘]}}">
16     pages2
17 </view>

页面样式:index.wxss

1 .tabBar{width: 100%;
2        display: flex; flex-direction: row; justify-content:space-around;
3        position: fixed; bottom: 0;
4        border-top:red solid 1rpx; padding: 6rpx 0
5         }
6 .tarItem{text-align: center; font-size:30rpx; }
7 .tarIco{width: 60rpx; height: 60rpx}

页面逻辑:index.js

 1 var imgURI_js = require(‘../../utils/imgURI.js‘);
 2 Page({
 3   data: {
 4      //配置选项卡
 5       tabBar:[
 6         {
 7          tarFunction:‘log‘ ,
 8          tarIco:imgURI_js.gets(‘log1‘),
 9          tarTxt:‘日志‘, isHidden:false
10         },
11         {
12          tarFunction:‘add‘,
13          tarIco:imgURI_js.gets(‘add‘),
14          tarTxt:‘添加‘, isHidden:true
15         },
16         {
17          tarFunction:‘my‘ ,
18          tarIco:imgURI_js.gets(‘my0‘),
19          tarTxt:‘备忘‘, isHidden:true
20         }
21       ]
22   },
23
24   //点击日志tab
25   log:function(e){
26     var that=this;
27     var click=e.currentTarget.dataset.index;
28     //回调支持3个参数,第1个是遍历的数组内容;第2个是对应的数组索引,第3个是数组本身。
29     that.data.tabBar.forEach(function(value, index, array){
30         if(index!=click){array[index][‘isHidden‘]=true;}
31         else{array[index][‘isHidden‘]=false; }
32     })
33     that.data.tabBar[0][‘tarIco‘]=imgURI_js.gets(‘log1‘);
34     that.data.tabBar[2][‘tarIco‘]=imgURI_js.gets(‘my0‘);
35     that.setData(that.data);
36   },
37
38   //点击添加tab
39   add:function(){
40     var that=this;
41     wx.showActionSheet({
42       itemList: [‘新增日程‘, ‘新增备忘‘],
43       success: function(res) {
44         console.log(res.tapIndex)
45       }
46     })
47   },
48
49   //点击备忘tab
50   my:function(e){
51     var that=this;
52     var click=e.currentTarget.dataset.index;
53     that.data.tabBar.forEach(function(value, index, array){
54         if(index!=click){array[index][‘isHidden‘]=true;}
55         else{array[index][‘isHidden‘]=false;}
56     });
57     that.data.tabBar[0][‘tarIco‘]=imgURI_js.gets(‘log0‘);
58     that.data.tabBar[2][‘tarIco‘]=imgURI_js.gets(‘my1‘);
59     that.setData(that.data);
60   }
61 })

页面所用图片
log0:http://i1.piimg.com/580831/21427560d907daa1.png
log1:http://i1.piimg.com/580831/7301f39e7cd93dd8.png
add:http://i1.piimg.com/580831/ce49d7bc59e84c46.png
my0:http://i1.piimg.com/580831/091ca02deae1664b.png
my1:http://i1.piimg.com/580831/c5118f811ed44e28.png

效果预览

完整项目下载:https://git.oschina.net/dingshao/wechatApp_tabBar.git

时间: 2024-12-28 18:03:08

自定义底部导航栏(tabBar)的相关文章

带有指示器的自定义底部导航栏的实现

转载请注明出处:http://blog.csdn.net/zhaokaiqiang1992 今天这篇文章,主要是给大家实现一个自定义的带有指示器的底部导航栏. 先看一下实现的效果吧. 这个自定义控件的使用要注意以下几个方面: 1.没有布局文件及资源文件,只需要一个java文件就可调用 2.可以非常灵活的使用,一句代码就可以添加到项目中 3.暂时只支持4.0以上版本,颜色值使用的是系统自带色值,如需在低版本使用,请自己替换颜色值 4.支持智能适配,可以根据底部按钮的数量,自动的调整布局 5.主内容

隐藏底部导航栏tabbar

在有tabbarcontroller时,A界面push到B界面想隐藏底部tabbar,从B界面返回A后再显示tabbar.那么在控制器A中可以设置 -(void)clickTheSettingBtn{ ControllerB *vcB = [[ControllerB alloc]init]; //在跳转之前设置为YES self.hidesBottomBarWhenPushed = YES; [self.navigationController pushViewController:vcB an

再谈小程序自定义底部导航

小程序自定义tabBar再探索 前言 最近有很多微信开发者朋友在QQ上加我好友,忽然意识到大家对微信自定义底部导航栏需求还是挺大的,故而再次整理下底部导航栏组件开发思路.和之前的文章还是有些区别,并且底部导航栏组件增加新的特性以及一些优化开发体验的骚操作. 技术选型 与之前不同,现在我们有两种方法实现自定义底部导航栏,因为小程序在2.5.0开始支持自定义底部导航栏了戳此处看文档,所以我们现在的可选方案为: 通过HideTabBar接口hack底部导航栏 通过小程序支持配置实现底部导航栏 下面根据

uni-app添加自定义底部导航栏,实现根据权限动态切换底部栏目的功能

uni-app针对底部导航栏TabBar,只提供了动态修改样式文字和图标的API,并没有提供动态修改某个栏目的跳转链接.追加或者删除某个栏目的功能. 问题阐述:实际开发的项目中的确需要判断登录账户的权限,来动态显示某两个,或者某三个栏目 如:管理用户显示[首页,管理,我的],普通用户显示[首页,我的],中间的管理页面,就得动态判断是否要追加了 解决方案:隐藏原有的tabBar,添加自定义的底部导航栏 1.思路:参照原来导航栏的写法,延用原来TabBar的样式布局,在每个栏目的首页添加自定义导航栏

仿Android印象笔记底部导航栏

最近用上了印象笔记,觉得android 版的底部导航栏挺不错的,好多应用里面都有用到,想着自己动手实现一下,不多说,先上图: 要完成这样的效果.需要自定义ViewGroup. 1.onMeasure(测量过程) 2.onLayout(布局) 3.添加动画 onMeasure(测量过程) @Override protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) { int count = getChildCoun

Android开源项目——带图标文字的底部导航栏IconTabPageIndicator

接下来的博客计划是,在<Android官方技术文档翻译>之间会发一些Android开源项目的介绍,直接剩下的几篇Android技术文档发完,然后就是Android开源项目和Gradle翻译了.当然,其他的文章笔记也会偶尔发一下. 本文原创,转载请注明在CSDN上的出处: http://blog.csdn.net/maosidiaoxian/article/details/42638245 简介 本篇文章介绍的是一个底部导航栏,叫IconTabPageIndicator,一个带图标文字的导航栏.

Android基础入门教程——5.2.3 Fragment实例精讲——底部导航栏的实现(方法3)

Android基础入门教程--5.2.3 Fragment实例精讲--底部导航栏的实现(方法3) 标签(空格分隔): Android基础入门教程 本节引言 前面我们已经跟大家讲解了实现底部导航栏的两种方案,但是这两种方案只适合普通的情况,如果 是像新浪微博那样的,想在底部导航栏上的item带有一个红色的小点,然后加上一个消息数目这样, 前面两种方案就显得无力了,我们来看看别人的APP是怎么做的,打开手机的开发者选项,勾选里面的: 显示布局边界,然后打开我们参考的那个App,可以看到底部导航栏是这

底部导航栏使用BottomNavigationBar

1.github地址 https://github.com/zhouxu88/BottomNavigationBar 2.基本使用 2,1添加依赖 implementation 'com.ashokvarma.android:bottom-navigation-bar:2.0.5' 2.2布局中使用 <com.ashokvarma.bottomnavigation.BottomNavigationBar android:layout_width="match_parent" an

实现底部导航栏

许多的App都使用底部导航栏来实现导航功能,我们可以使用RadioGroup+RadioButton的形式或者直接Button数组的方式实现,而谷歌官方提供了FragmentTabHost来方便快捷实现底部导航栏. android.support.v4.app.FragmentTabHost 主要代码: fragmentTabHost.setup(this, getSupportFragmentManager(), R.id.layout_content); for (int i = 0; i