TabLayout选项卡文本颜色状态列表

时间:2017-11-28 11:06:53

标签: android android-layout tabs android-tablayout

我希望我的TabLayout标签有三种不同的文字颜色,具体取决于标签状态:

  1. 默认 - 红色
  2. 已停用 - 黄色
  3. 已选择 - 绿色
  4. 我正在添加我的TabLayout:

    <android.support.design.widget.TabLayout
                    android:id="@+id/tlBetTypes"
                    style="@style/BetTabLayoutStyle"
                    android:layout_width="match_parent"
                    android:layout_height="38dp">
    
                    <android.support.design.widget.TabItem
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/single"/>
    
                    <android.support.design.widget.TabItem
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/multi"/>
    
                    <android.support.design.widget.TabItem
                        android:layout_width="wrap_content"
                        android:layout_height="wrap_content"
                        android:text="@string/system"/>
    </android.support.design.widget.TabLayout>
    

    然后BetTabLayoutStyle

    <style name="BetTabLayoutStyle">
        <item name="tabIndicatorHeight">0dp</item>
        <item name="tabTextAppearance">@style/BetTabTexStyle</item>
        <item name="tabBackground">@drawable/background_tab_bet_type</item>
    </style>
    

    然后BetTabTexStyle

    <style name="BetTabTexStyle">
        <item name="android:textSize">@dimen/text_size_12</item>
        <item name="android:textColor">@color/tab_test</item>
        <item name="android:fontFamily">@font/roboto_medium</item>
        <item name="textAllCaps">true</item>
    </style>
    

    然后tab_test.xml

    <selector xmlns:android="http://schemas.android.com/apk/res/android">
        <item android:color="@color/red"/>
        <item android:color="@color/yellow" android:state_enabled="false"/>
        <item android:color="@color/green" android:state_selected="true"/>
    </selector>
    

    但它没有用。

    我还尝试从代码中创建ColorStateList,并使用setTabTextColors设置和设置。

    请你解释一下我做错了什么?

3 个答案:

答案 0 :(得分:1)

你试过这个吗?

  <android.support.design.widget.TabLayout
                android:layout_width="match_parent"
                android:layout_height="wrap_content"
                app:tabMode="scrollable"
                app:tabGravity="fill"
                app:tabTextColor="@color/defaultColor"
                app:tabSelectedTextColor="@color/whenTabSelectedColor"/>

答案 1 :(得分:1)

试试这个

<style name="BetTabLayoutStyle" parent="Widget.Design.TabLayout">
     <item name="tabIndicatorHeight">0dp</item>
     <item name="tabTextAppearance">@style/BetTabTexStyle</item>
     <item name="tabBackground">@drawable/background_tab_bet_type</item>
</style>

答案 2 :(得分:0)

解决这个问题的两个步骤:

  1. 从代码设置ex:Italy ,因为如果您在xml中对其进行充气,ColorStateList会重置构造函数中的文本外观。

    TabLayout
  2. 禁用标签内的private void setupTabsStyle() { int[][] states = new int[][]{ new int[]{android.R.attr.state_selected}, new int[]{android.R.attr.state_enabled}, new int[]{-android.R.attr.state_enabled} }; @ColorRes int[] colorRes = new int[]{ R.color.orange_1, R.color.grey_16, R.color.grey }; @ColorInt int[] colors = new int[colorRes.length]; for (int i = 0; i < colorRes.length; i++) { colors[i] = ContextCompat.getColor(getContext(), colorRes[i]); } ColorStateList colorList = new ColorStateList(states, colors); mTabLayout.setTabTextColors(colorList); } ,而不仅仅是标签本身。特别是我们需要禁用/启用TextView内的TextView才能实现文本效果,但我也会禁用TabView

    ImageView