通过TabLayout自定义tab实现图文混搭导航栏
来源:互联网 发布:nginx 不允许加参数 编辑:程序博客网 时间:2024/06/06 02:12
国际惯例先看效果
好久不见,最近沉默与需求无法自拔,也根据最近的小需求做出一篇使用性的教程,内容不难。
本效果是使用谷歌提供的design库中的tabyout来实现的效果
com.android.support:design:25.1.1
如果不使用design库,我们可能需要自定义个横向的导航栏来实现这种效果,但是谷歌推出了官方的东西,这东西也好用我们不妨使用官方库来实现我们的需求。
先说几个使用TabLayout的优势:
1.我们可以看到tab下方的红线是有过渡动画并且可以伸缩,如果自己手写动画也是比较麻烦的。
2.可以直接给TabLayout设置ViewPager直接实现联动
3.支持图文混搭也支持自定义的view加入tab中。(本文demo就是自定义的一个view加入tab中)
4.多tab可以滑动的时候,居中滚动流畅准备。
5.支持方法多,扩展性强(比如tab想支持GIF就在tab加个imageview使用Glide显示一下gif十分方便),官方出品用着放心。
接下来就组装一下这个小demo
首先在xml中定义一个TabLayout和一个ViewPager
<android.support.design.widget.TabLayout android:id="@+id/tab_layout" android:layout_width="match_parent" android:layout_height="wrap_content" app:tabBackground="@drawable/tab_backgroud"></android.support.design.widget.TabLayout> <android.support.v4.view.ViewPager android:id="@+id/p1" android:layout_width="match_parent" android:layout_height="match_parent"></android.support.v4.view.ViewPager>
然后关联TabLayout和ViewPager
mTabLayout.setupWithViewPager(mViewpager); for (int i = 0; i < mTabLayout.getTabCount(); i++) { TabLayout.Tab tab = mTabLayout.getTabAt(i); if (tab != null) { tab.setCustomView(mPagerAdapter.getTabView(i)); } }
我们自定义一个pagerAdapter,并额外提供一个getTabView方法
public View getTabView(int position) { if (position == 4 || position == 6) { View v = LayoutInflater.from(context).inflate(R.layout.textview_item, null); return v; } View v = LayoutInflater.from(context).inflate(R.layout.imageview_item, null); ImageView im = (ImageView) v.findViewById(R.id.m1); imageViewSparseArray.put(position, im); if (position == 0) im.setImageResource(R.mipmap.timg); return v; }
给TabLayout设置监听并且处理选中非选中等状态:
mTabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() { @Override public void onTabSelected(TabLayout.Tab tab) { Log.d("lmt", "tabtabtab" + tab.getPosition()); if (imageViewSparseArray.get(tab.getPosition()) != null) imageViewSparseArray.get(tab.getPosition()).setImageResource(R.mipmap.timg); } @Override public void onTabUnselected(TabLayout.Tab tab) { if (imageViewSparseArray.get(tab.getPosition()) != null) imageViewSparseArray.get(tab.getPosition()).setImageResource(R.mipmap.ic_launcher); } @Override public void onTabReselected(TabLayout.Tab tab) { } });
tabLayout默认是有点击水波纹的,如果我们不需要这个系统原生的点击水波纹效果。在tabLayout设置一个自定义的selector即可。
app:tabBackground="@drawable/tab_backgroud
跟多的TabLayout API博主就不一样介绍了,大家可以自行查阅。
demo地址:
https://github.com/AndroidMsky/TabLayoutWithAnyView
哪里可以找到我:
我的Github: https://github.com/AndroidMsky
我的博客主页: http://blog.csdn.net/androidmsky
欢迎加作者自营安卓开发交流群:
308372687
- 通过TabLayout自定义tab实现图文混搭导航栏
- TabLayout与ViewPager组合实现tab导航
- TabLayout实现导航栏
- Tablayout实现导航栏
- Android开发:顶部&底部Tab导航栏实现(TabLayout+ViewPager+Fragment)
- Tablayout+viewpager+fragment实现tab导航以及滑动切换
- TabLayout实现仿今日头条顶部tab导航效果
- TabLayout实现滑动导航栏
- TabLayout实现底部导航栏
- 自定义TabLayout的Tab
- Android---Tablayout自定义tab
- 自定义tab,viewpager实现仿tablayout切换效果
- Android 中TabLayout实现Tab自定义和选中文字加粗
- Android TabLayout、ViewPager实现顶部和底部Tab导航 点击滑动切换Tab页面
- TabLayout自定义Tab的title
- Android导航Tab栏实现
- Tab导航栏的实现
- 使用TabLayout快速实现一个导航栏
- 推荐两个前端框架
- Glide图片加载框架的学习
- 【总结】Mac下AndroidStudio快捷键
- caffe出现error while loading shared libraries: libopencv_core.so.3.1: cannot open shared object file:
- Android 蓝牙开发,蓝牙连打印机。
- 通过TabLayout自定义tab实现图文混搭导航栏
- spring cloud-学习之路(一):搭建一个简单的Springboot项目
- PPT另存为pdf的图片失真问题解决
- Android事件分发详解-心得
- 虫虫的java之旅(源码篇)---Object
- android ble蓝牙开发
- 1)编写Animal接口,接口中声明run()方法; 2)定义Bird类和Fish类实现Animal接口; 3)编写Bird类和Fish类的测试程序,并调用其中的run()方法
- mysql格式化日期
- 大兴公寓的那场火,烧毁了我的所有