关于ViewPager与TabLayout组合使用时tab.setIcon()失效分析

本文分析了在ViewPager与TabLayout结合使用时,TabLayout的setIcon()方法失效的问题。内容探讨了可能的原因,即在使用setupWithViewPager时,由于getPageTitle返回的字符串导致图标被覆盖。解决方案包括在图标被移除后重新添加,或者自定义TabLayout。作者作为处女座开发者,还提到会封装一个自定义的TabLayout分享给大家。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

关于ViewPager与TabLayout组合使用时tab.setIcon()失效分析


谷歌Material Design,提供了一系列常用标准控件,让我们可以在上面自由拓展,降低了我们的使用难度,也将一些开源项目推向末日。今天我们不讨论这些,主要说明在ViewPager与TabLayout组合使用产生的问题,以及本人的解决方案。如图:

当我们setIcon()时,预计情况是应该一张图片和一个文本,实际效果,只显示文本,icon莫名其妙消失。

可能原因:我们给tablayout设置文本加图片,但是在vp的适配器中通过getPageTitle()返回的是一个单纯的字符串使用setupWithViewPager将vp与lablayout关联起来(setTabsFromPagerAdapter已不推荐使用),后者将前者覆盖掉,是否是这样呢?

我们直接从setupWithViewPager开始去找

这个方法主要分3部分:
1. 如果已经设置过 ViewPager 了,并且也设置了PageChangeListener,则将它移除

2.如果传入了一个空的 ViewPager,就将 ViewPager,r和PagerAdapter都设置为空

3.到这里我们仍然没有发现问题,这时我们看到setPagerAdapter

我们进去看看,一直到这里,removeAllTabs()移除所有tab,然后从getPageTitle获取文本,现在知道原因,恍然大悟。


原因出来了,解决方案. 1,既然你remove,我重新add进去不就可以了?
2.重写TabLayout.
当然,作为一名标准的处女座,在闲下来后,我自己会封装一个TabLayout上传
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值