如何更改 TabLayout 中选中的选项卡的图标颜色?

新手上路,请多包涵

我正在使用 TabLayoutViewPager 我想知道如何最有效地更改 TabLayout 中所选选项卡的图标颜色。

Google 的 Youtube 应用 是如何实现的完美参考。在主页上,有四个深灰色的图标。选择特定选项卡时,选项卡的图标变为白色。

没有任何第三方库,我怎样才能达到同样的效果?

一种可能的解决方案显然是使用选择器。 但在那种情况下,我将不得不同时找到图标的白色和灰色版本,然后在选项卡被选中或取消选中时切换图标。我想知道是否有更有效的方法可以只突出显示图标颜色或其他内容。我在任何教程中都找不到这个。

编辑

我在上面直接提到的解决方案需要为每个选项卡的图标使用两个可绘制对象。我想知道是否有一种方法可以通过为每个选项卡的图标使用 一个 可绘制对象以编程方式进行。

原文由 waylonion 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1.2k
1 个回答

我找到了一种简单的方法。

     viewPager = (ViewPager) findViewById(R.id.viewpager);
    setupViewPager(viewPager);

    tabLayout = (TabLayout) findViewById(R.id.tabs);
    tabLayout.setupWithViewPager(viewPager);
    tabLayout.setOnTabSelectedListener(
            new TabLayout.ViewPagerOnTabSelectedListener(viewPager) {

                @Override
                public void onTabSelected(TabLayout.Tab tab) {
                    super.onTabSelected(tab);
                    int tabIconColor = ContextCompat.getColor(context, R.color.tabSelectedIconColor);
                    tab.getIcon().setColorFilter(tabIconColor, PorterDuff.Mode.SRC_IN);
                }

                @Override
                public void onTabUnselected(TabLayout.Tab tab) {
                    super.onTabUnselected(tab);
                    int tabIconColor = ContextCompat.getColor(context, R.color.tabUnselectedIconColor);
                    tab.getIcon().setColorFilter(tabIconColor, PorterDuff.Mode.SRC_IN);
                }

                @Override
                public void onTabReselected(TabLayout.Tab tab) {
                    super.onTabReselected(tab);
                }
            }
    );

原文由 Cristian Hoyos 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题