如何改变SlidingTabLayout的文字颜色?

时间:2014-08-01 22:57:11

标签: java android android-actionbar android-viewpager android-actionbar-compat

我创建了一个使用 ActionBarCompat

的应用程序

我使用 SlidingTabLayout 类创建了标签。

班级是这样的:

SlidingTabLayout.java

但我无法更改标签的颜色......

我的viewpager片段是这样的:

<swmovil.fyb.SlidingTabLayout
    android:id="@+id/mTabs"
    android:layout_width="match_parent"
    android:layout_height="48dip" />

<android.support.v4.view.ViewPager
    android:id="@+id/mPager"
    android:layout_width="match_parent"
    android:layout_height="0px"
    android:layout_weight="1"
    android:background="@color/white" />

该应用程序运行良好,但我无法更改标签的彩色文字 ...

我看了下面的例子后做了申请:

rudsonlive/Navigation-Drawer-ViewPager-ActionBarCompat

如何更改标签文字的文字颜色?

谢谢!!!

8 个答案:

答案 0 :(得分:45)

1)首先在res(/ res / color)下创建颜色文件夹
2)在/ res / color文件夹下创建xml文件selector.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_focused="true" android:color="@android:color/white" />
<item android:state_pressed="true" android:color="@android:color/white" />
<item android:color="#504f4f" /> 
</selector> 

3)然后在SlidingTabLayout的populateTabStrip()方法中放这个

tabTitleView.setTextColor(getResources().getColorStateList(R.color.selector));

现在您有一个选择器,您可以在任何想要的事件上更改文本的颜色

如果不起作用,请添加以下代码行 a)在populateTabStrip()方法结尾添加此

if (i == mViewPager.getCurrentItem()) {
    tabView.setSelected(true);
}

和b)将onPageSelected()方法更改为此

    @Override
    public void onPageSelected(int position) {
        if (mScrollState == ViewPager.SCROLL_STATE_IDLE) {
            mTabStrip.onViewPagerPageChanged(position, 0f);
            scrollToTab(position, 0);
        }
        for (int i = 0; i < mTabStrip.getChildCount(); i++) {
            mTabStrip.getChildAt(i).setSelected(position == i);
        }
        if (mViewPagerPageChangeListener != null) {
            mViewPagerPageChangeListener.onPageSelected(position);
        }
    }    

答案 1 :(得分:14)

打开您的文件SlidingTabLayout.java(Google IO中的默认文件)并找到函数populateTabStrip(),然后在此代码之后

mTabStrip.addView(tabView);
        if (i == mViewPager.getCurrentItem()) {
            tabView.setSelected(true);
        }

添加以下行:

int color = ContextCompat.getColor(tabView.getContext(), R.color.grey);
tabTitleView.setTextColor(color);

R.color.grey替换为您喜欢的颜色。

答案 2 :(得分:4)

您应该能够看到该类正在使用的TextView。

tabTitleView.setTextColor(getResources().getColor(R.color.white));

在我的课堂上,TextView是tabTitleView。如果您使用的是Google提供的默认示例,则可以在populateTabStrip函数下找到它。

答案 3 :(得分:4)

复制slidingtablayout和slidingtabstrip的代码并将其放入java文件中。然后在layout文件夹中创建customtab_title.xml,在drawable文件夹中创建一个selector.xml文件。 `

<?xml version="1.0" encoding="utf-8"?>
        <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
           android:layout_width="match_parent"
           android:layout_height="wrap_content"
           android:orientation="horizontal"
           android:padding="10dp"
   >


<TextView
    android:id="@+id/textView2"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="New Text"
    android:textColor="@drawable/slidingtab_title_color"/>


</LinearLayout>

selector.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="@color/unpressed" />
    <item android:state_focused="true" android:color="@color/unpressed" />
    <item android:state_pressed="true" android:color="@color/unpressed" />
    <item android:color="@android:color/black" />
</selector> 

在你的主要活动中或你显示你的标签的地方添加一行代码 - tabs.setCustomTabView(R.layout.customtab_title,R.id.textView2);

这里的标签是slidingtablayout标签;

更改指示灯颜色 -  tabs.setSelectedIndicatorColors(getResources()的getColor(R.color.unpressed));

答案 4 :(得分:2)

   @Override
    public void onPageSelected(int position) {

for (int i = 0; i < mTabStrip.getChildCount(); i++) {

  TextView tv = (TextView) mTabStrip.getChildAt(i);
 if (i==position)
  tv.setTextColor(getResources().getColorStateList(R.color.white));
 else                             
  tv.setTextColor(getResources().getColorStateList(R.color.tab_text_color));

        }

这可能会对你有所帮助

答案 5 :(得分:1)

不幸的是,这个类不支持自定义选项卡文本颜色而不编辑代码,并且总是使用主题的默认文本颜色。您必须修补该类以允许按代码或样式属性设置选项卡文本颜色。 另一种方法是使用PagerSlidingTabStrip库。

答案 6 :(得分:0)

查看SlidingTabLayout的代码...您可以设置自定义选项卡视图,该视图允许您控制选项卡的内容并设置自定义选项卡文本颜色。看一下slidingTabLayout.setCustomTabView(int layoutResId,int textViewId)。

答案 7 :(得分:0)

我使用Panayiotis Irakleous解决方案,但我认为最好避免在onPageSelected过程中循环部分。

步骤相同,您需要添加一个int类成员(例如:mCurrentTabIndex)以保存当前选项卡索引。

在步骤3.a中,您需要添加

mCurrentTabIndex = i;

所以它会是这样的:

if (i == mViewPager.getCurrentItem()) {
    tabView.setSelected(true);
    mCurrentTabIndex = i;
}

最后,在步骤3.b中,将循环部分替换为:

mTabStrip.getChildAt(mCurrentTabIndex).setSelected(false);
mTabStrip.getChildAt(position).setSelected(true);
mCurrentTabIndex = position;

所以代码将是这样的:

@Override
public void onPageSelected(int position) {
    if (mScrollState == ViewPager.SCROLL_STATE_IDLE) {
        mTabStrip.onViewPagerPageChanged(position, 0f);
        scrollToTab(position, 0);
    }

    mTabStrip.getChildAt(mCurrentTabIndex).setSelected(false);
    mTabStrip.getChildAt(position).setSelected(true);
    mCurrentTabIndex = position;

    if (mViewPagerPageChangeListener != null) {
        mViewPagerPageChangeListener.onPageSelected(position);
    }
}