我希望我的TabLayout
标签有三种不同的文字颜色,具体取决于标签状态:
我正在添加我的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
设置和设置。
请你解释一下我做错了什么?
答案 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)
解决这个问题的两个步骤:
从代码设置ex:Italy
,因为如果您在xml中对其进行充气,ColorStateList
会重置构造函数中的文本外观。
TabLayout
禁用标签内的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