我希望在我的应用中使用TabLayout
和ViewPager
,但我想为TabLayout
设置自定义字体,但我不能这样!
我使用这段代码:
Typeface droidSerifMonoTF = Typeface.createFromAsset(getAssets(), "fonts/DroidSerif.ttf");
for (int i = 0; i < mSectionsPagerAdapter.getCount(); i++) {
TextView t = new TextView(this);
t.setText(mSectionsPagerAdapter.getPageTitle(i) );
t.setTypeface(droidSansMonoTF);
actionBar.addTab(actionBar.newTab()
.setCustomView(t)
.setTabListener(this));
}
来自此链接:Link但不要工作我! 我怎么能?
答案 0 :(得分:3)
您可以通过扩展 TabLayout 类来实现。如下所示覆盖 onLayout 方法:
@Override
protected void onLayout(boolean changed, int left, int top, int right, int bottom){
super.onLayout(changed, left, top, right, bottom);
final ViewGroup tabStrip = (ViewGroup)getChildAt(0);
final int tabCount = tabStrip.getChildCount();
ViewGroup tabView;
int tabChildCount;
View tabViewChild;
for(int i=0; i<tabCount; i++){
tabView = (ViewGroup)tabStrip.getChildAt(i);
tabChildCount = tabView.getChildCount();
for(int j=0; j<tabChildCount; j++){
tabViewChild = tabView.getChildAt(j);
if(tabViewChild instanceof AppCompatTextView){
if(fontFace == null){
fontFace = Typeface.createFromAsset(context.getAssets(), context.getString(R.string.IranSans));
}
((TextView) tabViewChild).setTypeface(fontFace, Typeface.BOLD);
}
}
}
}
必须覆盖onLayout方法,因为当您使用 setupWithViewPager 方法将TabLayout与ViewPager绑定时,您必须使用setText方法或在此之后在PagerAdapter中设置标签文本以及何时发生,onLayout方法调用父ViewGroup(TabLayout),这是放置设置字体的地方。(更改TextView文本导致调用它的父项的onLayout方法 - 一个tabView有两个子节点,一个是ImageView另一个是TextView)
另一种解决方案:
首先,这些代码行:
if(fontFace == null){
fontFace = Typeface.createFromAsset(context.getAssets(), context.getString(R.string.IranSans));
}
在上面的解决方案中,应该写在两个循环之外。
但 API&gt; = 16 的更好解决方案是使用 android:fontFamily :
创建 Android资源目录命名字体,并将所需字体复制到目录中。
然后使用这些样式:
<style name="tabLayoutTitles">
<item name="android:textColor">@color/white</item>
<item name="android:textSize">@dimen/appFirstFontSize</item>
<item name="android:fontFamily">@font/vazir_bold</item>
</style>
<style name="defaultTabLayout">
<item name="android:layout_width">match_parent</item>
<item name="android:layout_height">@dimen/defaultTabLayoutHeight</item>
<item name="android:gravity">right</item>
<item name="tabTextAppearance">@style/tabLayoutTitles</item>
<item name="tabSelectedTextColor">@color/white</item>
<item name="tabIndicatorColor">@color/white</item>
<item name="tabIndicatorHeight">@dimen/accomTabIndicatorHeight</item>
<item name="tabMode">fixed</item>
<item name="tabGravity">fill</item>
<item name="tabBackground">@drawable/rectangle_white_ripple</item>
<item name="android:background">@color/colorPrimary</item>
</style>