如何使用Android中的代码中的TabLayout更改选定的选项卡文本颜色?

ras*_*a67 34 android android-tabs android-tablayout

在此输入图像描述

我正在使用android.support.widget.TabLayoutTab视图,我想从代码(而不是从xml或通过样式)更改选定的选项卡文本颜色.我怎样才能做到这一点 ?

Sha*_*n_B 72

如果您使用的是设计支持库,请将此代码添加到选项卡活动中.

tabLayout.setSelectedTabIndicatorColor(Color.parseColor("#FF0000"));
tabLayout.setSelectedTabIndicatorHeight((int) (5 * getResources().getDisplayMetrics().density));
tabLayout.setTabTextColors(Color.parseColor("#727272"), Color.parseColor("#ffffff"));
Run Code Online (Sandbox Code Playgroud)

这将在选项卡活动中设置选项卡文本颜色以及选项卡指示器颜色.


Moh*_*ani 61

使用XML非常简单.只需在选项卡布局中添加以下2个属性即可.

app:tabSelectedTextColor="@color/color_primary_text"
app:tabTextColor="@color/color_secondary_text"
Run Code Online (Sandbox Code Playgroud)

所以,你的代码看起来像这样.

<android.support.design.widget.TabLayout
    android:id="@+id/tab_layout"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_alignParentBottom="true"
    android:layout_alignParentStart="true"
    android:layout_gravity="bottom"
    android:background="@color/button_background"
    android:fillViewport="true"
    app:tabBackground="@drawable/fixed_bottom_button"
    app:tabIndicatorColor="@color/color_primary_text"
    app:tabMode="fixed"
    app:tabSelectedTextColor="@color/color_primary_text"
    app:tabTextColor="@color/color_secondary_text" />
Run Code Online (Sandbox Code Playgroud)

  • @Raykud 是的,你是对的。但当时,我正在寻找使用 XML 的解决方案,并没有找到任何解决方案。因此,我为将来寻找相同解决方案的任何人发布了我的解决方案。 (2认同)

小智 12

请查看以下答案

 tabLayout.addOnTabSelectedListener(new TabLayout.OnTabSelectedListener() {
        @Override
        public void onTabSelected(TabLayout.Tab tab) {
            View view = tab.getCustomView();
            RelativeLayout relativeLayout = (RelativeLayout) view.findViewById(R.id.layout_background);
            relativeLayout.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.white));
            TypefacedTextView selectedText = (TypefacedTextView) view.findViewById(R.id.txt_tab_name);
            selectedText.setTextColor(ContextCompat.getColor(getActivity(), R.color.colorPrimary));

        }

        @Override
        public void onTabUnselected(TabLayout.Tab tab) {
            View view = tab.getCustomView();
            RelativeLayout relativeLayout = (RelativeLayout) view.findViewById(R.id.layout_background);
            relativeLayout.setBackgroundColor(ContextCompat.getColor(getActivity(), R.color.colorPrimary));
            TypefacedTextView selectedText = (TypefacedTextView) view.findViewById(R.id.txt_tab_name);
            selectedText.setTextColor(ContextCompat.getColor(getActivity(), R.color.white));
        }

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

        }
    });
Run Code Online (Sandbox Code Playgroud)

其中tabLayout是TabLayout类的对象


Md *_*ury 9

最好用“ com.google.android.material:material:1.0.0”更新库。然后使用下面的代码,

在 XML 属性中

<com.google.android.material.tabs.TabLayout
                    android:id="@+id/tab_layout"
                    android:layout_width="match_parent"
                    android:layout_height="wrap_content"
                    app:tabIndicatorColor="@color/white"
                    app:tabBackground="@color/colorAccent"
                    app:tabSelectedTextColor="@color/white"
                    app:tabTextColor="@color/white"
                    app:tabMode="scrollable" />
Run Code Online (Sandbox Code Playgroud)

在 Kotlin 中以编程方式

(tab_layout as TabLayout).setBackgroundColor(ContextCompat.getColor(mContext, R.color.colorPrimary))
(tab_layout as TabLayout).setSelectedTabIndicatorColor(ContextCompat.getColor(mContext, R.color.white))
(tab_layout as TabLayout).setTabTextColors(ContextCompat.getColor(mContext, R.color.white),
                ContextCompat.getColor(mContext, R.color.white))
Run Code Online (Sandbox Code Playgroud)


小智 5

我知道这可能有点晚了,但这里有更简单的代码:

tabLayout.setTabTextColors(getResources().getColor(R.color.blue_200), getResources().getColor(R.color.white));
Run Code Online (Sandbox Code Playgroud)

第一个值是默认文本颜色,第二个值是选定的选项卡文本颜色。