其他分享
首页 > 其他分享> > android-在首次显示的自定义滑动选项卡视图中设置文本颜色

android-在首次显示的自定义滑动选项卡视图中设置文本颜色

作者:互联网

我正在尝试根据标签状态在自定义视图中的滑动标签上设置文本颜色.它正在工作,但未在初始显示中显示.

选择选项卡时,自定义视图中的文本颜色应为白色,否则为深灰色.我已经部分工作了:当我手动选择一个选项卡时,文本颜色会正确更改.

我的问题是,在第一次显示时,第一个选项卡的文本不会以活动状态颜色(白色)着色,该选项卡的内容最初是在用户与选项卡进行任何交互之前显示的.灰色,如非活动标签.如果我开始与标签交互,则一切正常,但是第一个显示的标签的初始标签颜色不正确.

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

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

编辑2:
不,它不起作用.它可以在不设置自定义视图的情况下工作,但是在首次加载带有自定义视图的选项卡时,它仍然无法正确进行初始着色.

这是我的代码:

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>

有什么建议么?

解决方法:

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

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

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

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

标签:tabs,android-5-0-lollipop,android
来源: https://codeday.me/bug/20191119/2039207.html