在第一个显示的自定义滑动选项卡视图中设置文本颜色

时间:2015-08-22 19:22:29

标签: android tabs android-5.0-lollipop

我尝试根据选项卡状态在自定义视图中的滑动选项卡上设置文本颜色。它正在工作,但没有在初次展示。

当选项卡选择时,自定义视图中的文本颜色应为白色,否则为深灰色。我已经部分工作了:当我手动选择标签时,文字颜色会正确变化。

我的问题是,首次显示第一个标签的文字,其内容最初显示时,在与标签进行任何用户互动之前,未在活动状态颜色中着色< / strong>(白色)。它的灰色,就像非活动标签一样。如果我开始与选项卡进行交互,一切正常,但第一个显示选项卡的初始选项卡颜色是错误的。

[FIRST TAB | SECOND TAB]
     ^
    Grey (inactive color) on first load

修改 原因似乎在styles.xml中:如果我声明一个继承自 Widget.Design.TabLayout 的自定义样式,则初始着色不再起作用。如果我没有为tablayout声明自定义样式,一切正常!

EDIT2: 不,它不起作用。它可以在不设置自定义视图的情况下工作,但在首次通过设置自定义视图加载选项卡时仍然无法正确执行初始着色。

这是我的代码:

tab_gallerylayout.xml (自定义标签视图)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent">
<com.mbprojects.retro.view.RetroTextView
    android:id="@+id/tab_title"
    android:layout_height="wrap_content"
    android:layout_width="wrap_content"
    android:textColor="@drawable/gallerytab_title_color"
    app:font="@string/font_name_syncopate"
    />
</LinearLayout>

gallerytab_title_color.xml (选择器)

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

    <item android:color="@android:color/darker_grey" />
</selector>

styles.xml

<?xml version="1.0" encoding="utf-8"?>
<resources>
<style name="AppTheme" parent="@style/Theme.AppCompat.NoActionBar">
</style>
<style name="AppTheme.Base.Widget.Design.TabLayout" parent="Widget.Design.TabLayout">
    <item name="tabMaxWidth">@dimen/tab_max_width</item>
    <item name="tabIndicatorColor">@android:color/white</item>
    <item name="tabIndicatorHeight">0dp</item>
    <item name="tabPaddingStart">12dp</item>
    <item name="tabPaddingEnd">12dp</item>
    <item name="tabBackground">@android:color/black</item>
    <item name="tabTextAppearance">@style/TextAppearance.Design.Tab</item>

</style>

有什么建议吗?

2 个答案:

答案 0 :(得分:3)

这种异常行为的原因是您的viewPager将第一项设置为viewPager.setAdapter()内部的当前项。这反过来使tabLayout选择tabLayout.setupWithViewPager()中的第一个标签。

在此之后设置自定义选项卡时,自定义视图的状态不会更改为“已选择”(因为选择初始选项卡代码之前已经完成)。

因此,您需要明确更改所选选项卡的自定义视图的状态。 在设置自定义标签后添加以下行,您就可以了。

mTabLayout.getTabAt(mInitialTab).getCustomView().setSelected(true);

答案 1 :(得分:0)

您应该在xml而不是android:selector中使用android:textColor。前者用于动态更改属性,而后者分配一个值并保留它