2015-09-21 5 views
4

Я использую ViewPager с PagerTabStrip, и мне нужно установить пользовательские шрифты (typeface), но нет функции .setTypeFace для PagerTabStrip!Как изменить шрифт PagerTabStrip

Вот мой XML-код:

<android.support.v4.view.ViewPager xmlns:android="http://schemas.android.com/apk/res/android" 
    android:id="@+id/viewPager" 
    android:layout_width="fill_parent" 
    android:layout_height="fill_parent"> 

    <android.support.v4.view.PagerTabStrip 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content" 
     android:id="@+id/pagerTabStrip" 
     android:layout_gravity="top" 
     android:background="#FF0000" 
     android:textColor="#FFFFFF" /> 

</android.support.v4.view.ViewPager> 

Согласно this link, я нашел решение, которое может решить мою проблему.

Get the child views of the PagerTabStrip and check if it is an instance of a TextView. If it is, set the typeface:

for (int i = 0; i < pagerTabStrip.getChildCount(); ++i) { 
View nextChild = pagerTabStrip.getChildAt(i); 
if (nextChild instanceof TextView) { 
    TextView textViewToConvert = (TextView) nextChild; 
    textViewToConvert.setTypeface(PUT_TYPEFACE_HERE) 
} 
} 

Но я не понимаю, что это значит.

Моя раскладка:

Image

Я хочу изменить вкладку заголовка на другой стиль шрифта, .like ниже:

Image

+0

Попробуйте ** android: textAppearance ** атрибут, как я объяснил в своем ответе ... !! –

ответ

5

Вам нужно сделать, это создать стиль для текста, а затем используйте андроид: textAppearance атрибут ...

Что-то вроде этого:

<style name="PagerTabStripText"> 
    <item name="android:textStyle">italic</item> 
</style> 

Ваш PagerTabStrip XML будет выглядеть следующим образом:

<android.support.v4.view.PagerTabStrip 
    android:layout_width="match_parent" 
    android:layout_height="wrap_content" 
    android:id="@+id/pagerTabStrip" 
    android:layout_gravity="top" 
    android:background="#FF0000" 
    android:textColor="#FFFFFF" 
    android:textAppearance="@style/PagerTabStripText" /> 
+0

спасибо Vishesh, но мне нужно использовать пользовательский шрифт для моего pagerTabstrip. В моих исследованиях нет способа добавить внешний шрифт в xml-файл. Всего в xml доступны только три шрифта по умолчанию: мне нужно что-то вроде этого: @ assets/font1.ttf

+1

Затем вы можете перейти с API Java Reflection и получить доступ к текстовому элементу Non-public title и обновить textStyle, создав дочерний класс ** android.support. v4.view.PagerTabStrip ** –

+0

Не могли бы вы объяснить немного больше? :) –

3

Вы можете поместить font.ttf в активах/шрифты/папку и получить экземпляр шрифта

Typeface fontTypeFace= Typeface.createFromAsset(getContext().getAssets(), 
       "fonts/font.ttf"); 

for (int i = 0; i < pagerTabStrip.getChildCount(); ++i) { 
    View nextChild = pagerTabStrip.getChildAt(i); 
    if (nextChild instanceof TextView) { 
     TextView textViewToConvert = (TextView) nextChild; 
     textViewToConvert.setTypeface(fontTypeFace) 
    } 
} 
+0

** когда я использую этот код: ** 'ошибка: нестатический метод getChildCount() не может ссылаться на статический контекст' ** В чем проблема ...? ** –

+0

Вы используете эту вещь в статическом методе? –

+0

В моем приложении у меня есть функция «MainActivity», которая содержит viewpager с PagerTabStrip ...поэтому у меня есть: 'MainActivity' -' PagerAdapter' и 'frgmentA', где я должен использовать ваш код? ;) of the source я использовал их во всех трех ... но произошла ошибка! –

0

Вставьте файл .ttf в папку с ресурсами и используйте этот код в методе onCreate

fontTypeFace= Typeface.createFromAsset(getAssets(), 
      "fontawesome-webfont.ttf"); 

tabs = (PagerSlidingTabStrip) findViewById(R.id.tabs); 
    tabs.setTypeface(fontTypeFace,0); 
Смежные вопросы