第一步:(类的提取)
首先打开系统TabLayout源码,查看所在的包
![](https://img.haomeiwen.com/i2428158/fd22a8cb9e850c2f.png)
将TabLayout类复制到自己所建的包中,这时类中所引用的类因为是包权限关系会找不到
比如:
1:ThemeUtils
![](https://img.haomeiwen.com/i2428158/718ae6aa0ff5f7b2.png)
2:TabItem
![](https://img.haomeiwen.com/i2428158/51b63824e71ffd89.png)
3:AnimationUtils
![](https://img.haomeiwen.com/i2428158/878e950858f10ab1.png)
以上三个类如下图
![](https://img.haomeiwen.com/i2428158/9ed6b173fdb62c16.png)
找到系统TabLayout所在的包,将以上三个类提取出来 ,将TabLayout中所引用到的类改为提取出来的类,完成以上操作之后,可以像普通的自定义view一样使用自定义的TabLayout了。
第二步:(类文件整合)
将提取出来的类进行整合
1:AnimationUtils 中只有一个计算方法用到了 可删除此类 ,将方法与变量整合到TabLayout中
![](https://img.haomeiwen.com/i2428158/ee55a011dbe11e65.png)
2:ThemeUtils 中只是进行了一个主题检验,也可整合到TabLayout中
![](https://img.haomeiwen.com/i2428158/af65beaeb8b3cb2d.png)
3:TabItem 此类是一个自定义的view需要在布局文件中用到,固不改变
![](https://img.haomeiwen.com/i2428158/08dbd794f9471362.png)
第三步:(自定义属性)
1: TabItem属性可自定义也可使用系统定义的。
2:TabLayout 先保留系统的属性(将系统定义的属性复制出来),也可添加自定义属性
此图为系统属性
![](https://img.haomeiwen.com/i2428158/06165ddc78eab4ca.png)
此图为添加了自定义属性之后
![](https://img.haomeiwen.com/i2428158/1e8d11b29cf824c0.png)
第四步(自定义属性的实现)
实现原则:保留系统TabLayout的特性,在此基础上进行扩展
实现代码:仅贴出部分代码(以下代码都比较简单都可根据需要自行更改)
![](https://img.haomeiwen.com/i2428158/1f407cdce4489992.png)
![](https://img.haomeiwen.com/i2428158/8979fcba66c5851e.png)
![](https://img.haomeiwen.com/i2428158/e6d46115bba569a9.png)
第五步(效果呈现)
![](https://img.haomeiwen.com/i2428158/61ee87f3ced73bd6.png)
补充说明:下图可以看到 tabLayout.setupWithViewPager(viewPager);时移除了所有的Tabs
![](https://img.haomeiwen.com/i2428158/93c833268607a2da.png)
网友评论