在使用带有标签布局的自定义视图时,在活动加载时突出显示视图寻呼机中的第一项?

时间:2015-12-21 16:27:22

标签: android tabs android-viewpager viewpagerindicator android-tablayout

我正在使用像youtube应用这样的标签,并希望突出显示活动加载的第一页,因此我使用了以下代码

viewpager.setCurrentItem(0);//which does not highlight first tab onstarting the tab activity

我使用drawable作为tablayout中图标的背景。我通过获取tablayout的每个孩子来设置创建片段的drawable背景。我在

中设置了文字颜色
<item name="tabTextAppearance">@style/TabTextAppearance</item>

</style>
<style name="TabTextAppearance" parent="TextAppearance.Design.Tab">
    <item name="android:textColor">@color/tab_text_selector</item>
    <item name="android:textAllCaps">false</item>
</style>

其中一个选择器文件

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

还有另外两个drawable,我正在使用标签的自定义布局 如何在视图寻呼机中加载应用时突出显示的第一个项目

2 个答案:

答案 0 :(得分:2)

这有点棘手。

enter image description here

您应该以这种方式设置背景:

<android.support.design.widget.TabLayout
    xmlns:app="http://schemas.android.com/apk/res-auto"
    android:id="@+id/tabLayout"
    app:tabBackground="@drawable/tab_background"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"/>

即。将android:background更改为app:tabBackground

现在,当您按下标签页时,它会获得正确的背景drawable

将选择器应用于TabLayout中的图标:

tabLayout.setupWithViewPager(viewPager);
for (int i = 0; i < mTabLayout.getTabCount(); i++) {
    tabLayout.getTabAt(i).setIcon(R.drawable.icon_i_selector);
}

UPD:

@Preethi 一起来回走动后,我们解决了它:

 tabLayout.getTabAt(0).getCustomView().setSelected(true);

重要说明。 @Preethi 正在使用setCustomView()方法为View设置Tab

另一种可行的解决方法是避免自定义视图并以这种方式设置TextColor&amp; Icons:

    tabLayout.setTabTextColors(getColor(R.color.normal_color), getColor(R.color.selected_color));
    for (int i = 0; i < tabLayout.getTabCount(); i++) {
        tabLayout.getTabAt(i).setIcon(R.drawable.icon_selector);
    }

答案 1 :(得分:1)

您是否尝试选择viewpager中的第一个项目或第一个标签?
对于后者,请尝试

tabLayout.getTabAt(0).select();  

而不是

viewpager.setCurrentItem(0);