如何改变SlidingTabLayout的文字颜色?

我创建了一个使用ActionBarCompat的应用程序

我使用SlidingTabLayout类创建了选项卡。

这个class是这样的:

SlidingTabLayout.java

但我不能改变标签的颜色……

我的viewpager片段是这样的:

  

应用程序工作得很好,但我无法更改选项卡的颜色文本

我看了下面的例子后做了一个应用程序:

rudsonlive /导航抽屉ViewPager-ActionBarCompat

如何更改选项卡文本的文本颜色?

谢谢 !!!

1)首先在res(/ res / color)下创建颜色文件夹
2)在/ res / color文件夹下创建xml文件selector.xml

 < ?xml version="1.0" encoding="utf-8"?>       

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); } } 

打开文件SlidingTabLayout.java (来自Google IO的默认文件)并find函数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

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

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

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

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

 < ?xml version="1.0" encoding="utf-8"?>    

selector.xml

 < ?xml version="1.0" encoding="utf-8"?>       

在你的mainactivity或你显示你的标签的地方添加一行代码 – tabs.setCustomTabView(R.layout.customtab_title,R.id.textView2);

这里的标签是slidingtablayout标签;

更改指示符颜色添加 – tabs.setSelectedIndicatorColors(getResources()。getColor(R.color.unpressed));

  @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)); } 

这可能会对你有所帮助

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

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

我使用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); } }