如何在SlidingTabLayout中选择tab的字体加粗?我发现了很多关于设置所选标签颜色的问题,但没有关于设置所选标签字体的问题。
您可以使用方法将TabLayout.OnTabSelectedListener
添加到TabLayout中addOnTabSelectedListener(TabLayout.OnTabSelectedListener listener)
。和重写方法,像这样:
@Override
public void onTabSelected(TabLayout.Tab tab) {
LinearLayout tabLayout = (LinearLayout)((ViewGroup) mMainTabs.getChildAt(0)).getChildAt(tab.getPosition());
TextView tabTextView = (TextView) tabLayout.getChildAt(1);
tabTextView.setTypeface(tabTextView.getTypeface(), Typeface.BOLD);
}
@Override
public void onTabUnselected(TabLayout.Tab tab) {
LinearLayout tabLayout = (LinearLayout)((ViewGroup) mMainTabs.getChildAt(0)).getChildAt(tab.getPosition());
TextView tabTextView = (TextView) tabLayout.getChildAt(1);
tabTextView.setTypeface(tabTextView.getTypeface(), Typeface.NORMAL);
}
@Override
public void onTabReselected(TabLayout.Tab tab) { }
在SlidingTabLayout.java中,您可以看到createDefaultTabView(Context Context)函数,这是您可以设置自定义字体的地方:
protected TextView createDefaultTabView(Context context) {
TextView textView = new TextView(context);
textView.setGravity(Gravity.CENTER);
textView.setTextSize(TypedValue.COMPLEX_UNIT_SP, TAB_VIEW_TEXT_SIZE_SP);
textView.setTypeface(Typeface.DEFAULT_BOLD);
textView.setTextColor(getResources().getColorStateList(R.color.main));
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.HONEYCOMB) {
// If we're running on Honeycomb or newer, then we can use the Theme's
// selectableItemBackground to ensure that the View has a pressed state
TypedValue outValue = new TypedValue();
getContext().getTheme().resolveAttribute(android.R.attr.selectableItemBackground,
outValue, true);
textView.setBackgroundResource(outValue.resourceId);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.ICE_CREAM_SANDWICH) {
// If we're running on ICS or newer, enable all-caps to match the Action Bar tab style
textView.setAllCaps(true);
}
int padding = (int) (TAB_VIEW_PADDING_DIPS * getResources().getDisplayMetrics().density);
textView.setPadding(padding, padding, padding, padding);
return textView;
}
setTypeface位于上面代码片段
我最后是这样处理的:
在onPageScrolled()
方法中做如下修改:
View selectedTitle = mTabStrip.getChildAt(position);
View leftOfSelected = mTabStrip.getChildAt(position-1);
View rightOfSelected=null;
if (position<=tabStripChildCount-1) {
rightOfSelected = mTabStrip.getChildAt(position + 1);
}
if (selectedTitle != null) {
TextView selectedText = (TextView) selectedTitle;
TextView leftOfSelectedText = (TextView) leftOfSelected;
TextView rightOfSelectedText = (TextView) rightOfSelected;
if (position > 0 && position < tabStripChildCount - 1) {
selectedText.setTypeface(Typeface.DEFAULT_BOLD);
leftOfSelectedText.setTypeface(Typeface.DEFAULT);
rightOfSelectedText.setTypeface(Typeface.DEFAULT);
} else if (position == 0) {
selectedText.setTypeface(Typeface.DEFAULT_BOLD);
rightOfSelectedText.setTypeface(Typeface.DEFAULT);
} else if (position == tabStripChildCount - 1) {
selectedText.setTypeface(Typeface.DEFAULT_BOLD);
leftOfSelectedText.setTypeface(Typeface.DEFAULT);
}
}
类似地,可以使用与上面相同的代码片段编辑scrollToTab()
方法。所有你需要做的就是用selectedChild
代替selectedTitle
,用tabIndex
代替position
。如果你想要更好的UI响应,你也可以在onPageSelected()
方法中做同样的事情。只要记住重新声明tabStripChildCount
。
干杯!
编辑:随着TabLayout的引入,这变得更容易了。请参考Alex Zatsepin的回答