查看原文
其他

Android 快速开发(二),封装一个 BottomTabBaseActivity

陈序员 鸿洋 2019-04-05

每日推荐


爱吖妹纸——Retrofit+Rx+MVP架构APP体验,福利多多,不容错过


作者说的这个福利,应该是技术福利~本来是给我投稿的一篇文章,不过偏向于介绍项目,就改为每日推荐啦~


https://github.com/nanchen2251/AiYaGirl


本文作者


本文由陈序员投稿。

陈序员的博客地址:

https://blog.ifmvo.cn/


这是接Android 快速开发(一),封装一个 TopBarBaseActivity之后,作者该系列的第二篇文章~


1

前言


上一篇我们详细介绍了 Android 快速开发(一),封装一个 TopBarBaseActivity 效果是显而易见的。接下来我们进行 Android 快速开发(二)。


效果


什么是快速开发嘞,看这个效果



然而实现 BottomTab + ViewPager 的效果我只用了这么几行代码:



添加 CenterView 也很简单,只需重写 getCenterView 方法并返回你想添加的 View。



为什么会这么简单呢,因为我把重复性的代码都封装在 父类 BottomTabBaseActivity 里面,这样的话,我们想实现 BottomTab + ViewPager 的效果只需实现三个方法,这样就可以大大提高我们的效率。爽YY~~~ 接下来我们一起实现这个 BottomTabBaseActivity。


2

BottomTabView



首先我介绍一下我自定义一个 BottomTabView,用于实现 Tab 效果

https://github.com/ifmvo/BottomTabView




它提供两个 setTabItemViews 方法,用于初始化 TabItem 的数据和 CenterView


setTabItemViews(List<TabItemView> tabItemViews); setTabItemViews(List<TabItemView> tabItemViews, View centerView);
提供 setOnTabItemSelectListener 方法,用于设置 TabItem 的选择监听,可以实现 ViewPager 的页面切换或者 Fragment 切换。



还提供 setOnSecondSelectListener ,当 TabItemView 已经被选择并再次点击时,会出发此监听,用于实现某些 App 二次点击 TabItemView 刷新功能。



你可以直接粘贴项目中这两个文件即可
BottomTabView.java、view_tab_item.xml


https://github.com/ifmvo/BottomTabView


3

开始


下面利用 BottomTabView 实现我们想要的 BottomTabBaseActivity

搭建整体布局


我们新建两个文件 BottomTabBaseActivity.java 和 activity_base_bottom_tab.xml,并把 BottomTabView.java 和 view_tab_item.xml 复制到我们的项目中



activity_base_bottom_tab.xml



BottomTabBaseActivity 设置成抽象类,并添加三个方法



我们为什么写两个 abstract 类型的方法呢,我们的思路是这样的:


  • 可变的东西(底部菜单的 Item、Fragment)放在子类去实现

  • 父类 BottomTabBaseActivity 实现不变的、重复性的代码


所以声明两个抽象方法 getTabViews、getFragments ,并在子类去实现,至于 getCenterView 方法可以自行定制,如果需要 CenterView 在子类实现方法即可。


MainActivity 继承自 BottomTabBaseActivity,只需实现两个方法,其他的什么也不需要做。



到这里,整体的布局已经搭建完毕,下面我们来实现功能.

实现底部 Tab

在 BottomTabBaseActivity 中添加:



在 MainActivity 中实现 getTabView 方法



TabItemView 构造方法的参数含义



现在你可以运行一下你的 MainActivity,是不是已经实现了 底部 Tab 的效果。



连接 BottomTabView 和 ViewPager


我们继续。接下来我们将 BottomTabView 和 ViewPager 进行连接,并切换 ViewPager 的页面,以显示不同的 Fragment。


声明、初始化一个 Adapter,并设置到 ViewPager 里面



利用 setOnTabItemSelectListener 方法设置 BottomTabView 的监听器,来切换 ViewPager



用 ViewPager 的 addOnPageChangeListener 方法,使 ViewPager 切换的时候,也同步切换 BottomTabView 的选中位置。



最后一步:实现 getFragments 方法 返回一个 List



当然 TabFragment 需要你自己去实现。 现在你再运行一下你的 MainActivity,是不是已经实现了。



你想一想,以后每个 BottomTab + ViewPager 的界面,只需 让你的 XXActivity extends BottomTabBaseActivity,再实现两个方法就可以了,多爽啊!


添加 CenterView


如果你想添加一个 CenterView 的话,你可以实现 getCenterView



或者这样写比较灵活:





如果你想让 CenterView 的上边界暴露在 BottomTabView 的外面的话,只需修改两处代码:


  • 将 BottomTabView 内部的 View 设置成 底部对齐

  • 在最外层布局添加属性并设置成 false


前提是你要保证 BottomTabView 内部的 CenterView 足够大。


activity_base_bottom_tab.xml




Prefect !~~


GitHub 地址

https://github.com/ifmvo/MatthewBases

ZZS

无论你是有 Java 基础希望学 Android 开发的程序员,还是想进一步提升能力的 Android 开发者,都可以在这个Udacity & Google 官方参与制作 的课程项目中找到适合自己的成长路径!



*独家硅谷技术课程

*行业领导者设计的实战项目

*一对一学习辅导

*名企颁发学习认证

*毕业直达滴滴面试


如果你有想学习的文章直接留言,我会整理征稿。如果你有好的文章想和大家分享欢迎投稿,直接向我投递文章链接即可。


欢迎长按下图->识别图中二维码或者扫一扫关注我的公众号:

    您可能也对以下帖子感兴趣

    文章有问题?点此查看未经处理的缓存