背景
我已经使用PagerSlidingTabStrip库很长时间了,用于在 ViewPager 上方显示选项卡。
最近,我的任务是设置图标(使用选择器,具有选定与未选定状态)而不是选项卡的文本,所以我做到了。但是,该库似乎无法很好地处理它,有时会显示空选项卡,因此我已移至TabLayout,它是 Google 设计库的一部分
问题
我注意到一些关于如何将图标添加到 TabLayout 的解决方案,但它们中的每一个都有一个或多个这些问题:
- 不显示任何图标
- 图标已显示,但可能会不时闪烁,尤其是在设置了“exitFadeDuration”的情况下使用选择器或快速滑动时
- 单击选项卡不会更改 viewPager 的当前页面。
编码
我使用的代码来自MainActivity.java 文件中的cheesesquare示例。这是非常基本的:
final TabLayout tabLayout = (TabLayout) findViewById(R.id.tabs);
ViewPager viewPager = (ViewPager) findViewById(R.id.viewpager);
...
tabLayout.setupWithViewPager(viewPager);
我尝试过的解决方案是:
为每个选项卡设置一个图标(并删除适配器的“getPageTitle”代码):
for (int i = 0; i < tabLayout.getTabCount(); i++) tabLayout.getTabAt(i).setIcon(...);
当我不使用选择器时,还尝试添加 setOnTabSelectedListener 。
此解决方案会导致闪烁效果(问题 #2)。
扩展 TabLayout 以支持图标或实现 TabViewProvider,如下所示。
扩展 TabLayout 根本不显示图标(问题 #1),并且实现 TabViewProvider 会出现图标闪烁的问题(尽管非常罕见)。
对于 getPageTitle,返回其中包含图标的 SpannableString,如此处所示。这对我来说根本没有显示图标。
我记得我也尝试过其他解决方案,但它们也有我提到的问题。
问题
为选项卡设置图标的正确方法是什么?
有没有官方的方法来实现这一点?我希望每个选项卡至少有一个选定和未选定的图像。选择时的过渡是一个很好的奖励,我希望实现这一点,因为这样看起来更好。
为什么图标总是闪烁?我注意到它甚至发生在文本中......
是否有解决方法?