当前位置: 首页 > 知识库问答 >
问题:

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

干茂才
2023-03-14

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

谷歌的Youtube应用程序是如何实现这一点的完美参考。在主页上,有四个深灰色图标。选择特定选项卡后,选项卡图标变为白色。

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

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

编辑

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

共有3个答案

公羊灿
2023-03-14
private void setupTabIcons() {
    tabLayout.getTabAt(0).setIcon(tabIcons[0]);
    tabLayout.getTabAt(1).setIcon(tabIcons[1]);
    tabLayout.getTabAt(2).setIcon(tabIcons[2]);
    tabLayout.getTabAt(3).setIcon(tabIcons[3]);

    tabLayout.getTabAt(0).getIcon().setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_IN);
    tabLayout.getTabAt(1).getIcon().setColorFilter(Color.parseColor("#a8a8a8"), PorterDuff.Mode.SRC_IN);
    tabLayout.getTabAt(2).getIcon().setColorFilter(Color.parseColor("#a8a8a8"), PorterDuff.Mode.SRC_IN);
    tabLayout.getTabAt(3).getIcon().setColorFilter(Color.parseColor("#a8a8a8"), PorterDuff.Mode.SRC_IN);


    tabLayout.setOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            tab.getIcon().setColorFilter(Color.GREEN, PorterDuff.Mode.SRC_IN);

        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
            tab.getIcon().setColorFilter(Color.parseColor("#a8a8a8"), PorterDuff.Mode.SRC_IN);
        }

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

        }
    });
}
端木夕
2023-03-14

这可以非常简单,完全在xml中完成。

在xml中的TabLayout中添加一行,应用程序:tabIconTint="@Color/your_color_selector",如下所示:

 <android.support.design.widget.TabLayout
     android:id="@+id/tab_layout"
     android:layout_width="match_parent"
     android:layout_height="wrap_content"
     app:tabIconTint="@color/your_color_selector"
     app:tabIndicatorColor="@color/selected_color"/>

然后,在res/color目录中创建一个颜色选择器文件(上面名为“your_color_selector.xml”):

<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
    <item android:color="@color/selected_color" android:state_selected="true"/>
    <item android:color="@color/unselected_color"/>
</selector>

这假设您有两种颜色,“selected_color”和“unselected_color”。xml文件。

刘博雅
2023-03-14

我找到了一个简单的方法

    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);
                }
            }
    );
 类似资料:
  • 我已经在我的应用程序上集成了底部栏导航栏。但是当我刷的时候,Tab的颜色不会改变。很奇怪因为我有选择器文件。有什么解决这个问题的主意吗?

  • 如何更改选项卡栏未选中图标和文本的颜色?我找到了这个答案(如何更改选项卡栏上的非活动图标/文本颜色?),但不能为斯威夫特实施。

  • 我正在尝试更改选定选项卡的突出显示颜色。标准似乎是蓝色的,它不是,因为它在蓝色高亮的顶部添加了一个边框。我想知道是什么属性改变了这个颜色。参见下图:

  • 我需要在单击ListView时更改选定项目的颜色,以便用户知道单击了什么。 到目前为止,我已经为此编写了以下代码: 它所做的是更改所选项目的背景色,并保持原样,直到我单击另一个项目,使其仅更改当前项目所选的背景色 我还想知道是否有一种XML方法可以做到这一点。到目前为止,我发现: 但我还没有得到之前代码的功能。不过,它所做的是更改背景颜色,并在单击时更改背景颜色,但不使用特定的颜色保留选定的项目

  • 我的xml代码如下: 我怎么在这里更改标题的颜色?我对android很陌生。

  • 问题内容: 我正在尝试将第一个选项的颜色更改为灰色,即只有文本(选择一个选项),但是在这里无法正常工作: 问题答案: Suresh,您不需要在代码中使用任何内容。您需要的是这样的东西: 但是正如您所看到的,因为选项中的第一项是选择控件显示的第一件事,所以您看不到其分配的颜色。如果您打开选择列表并看到已打开的项目,则会看到可以为第一个选项分配灰色。因此,您需要jQuery中的其他功能。