2012-11-09 10 views
17

Używam PagerTabStrip w ViewPager, aby wyświetlić tytuł każdej strony. Oto mój kod XML:Jak ustawić TextStyle of PagerTabStrip na Bold?

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:background="@drawable/bg"> 

    <android.support.v4.view.ViewPager 
     android:id="@+id/pager" 
     android:layout_width="fill_parent" 
     android:layout_height="fill_parent" 
    > 
    <android.support.v4.view.PagerTabStrip 
      android:id="@+id/pager_title_strip" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_gravity="top" 
      android:background="#33b5e5" 
      android:textColor="#a4c639" 
      android:paddingTop="4dp" 
      android:paddingBottom="4dp" /> 
    </android.support.v4.view.ViewPager> 

</RelativeLayout> 

Chcę ustawić textstyle do pogrubione w PagerTabStrip tak: android:textStyle="bold". Ale nie jest to możliwe w PagerTabStrip. Wygląda na to, że ma tylko właściwość textcolor dla tekstu. W jaki sposób mogę ustawić styl na pogrubiony?

+0

Co masz w "@ style/TitleStripTextAppearance"? – CommonsWare

+0

@CommonsWare Oh Zapomniałem usunąć tę linię w momencie zamieszczania pytania. Próbowałem dodać styl w '@ style/TitleStripTextAppearance', ale nie jestem pewien czy to zadziała, czy nie? – Jaguar

Odpowiedz

40

Co trzeba zrobić, to stworzyć styl tekstu, a następnie użyć android: atrybut textAppearance ...

Może coś takiego:

<style name="PagerTabStripText"> 
     <item name="android:textSize">14sp</item> 
     <item name="android:textStyle">bold</item> 
     <item name="android:textColor">#a4c639</item> 
</style> 

A potem w PagerTabStrip XML to zrobić:

<android.support.v4.view.PagerTabStrip 
     android:id="@+id/pager_title_strip" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_gravity="top" 
     android:background="#33b5e5" 
     android:paddingTop="4dp" 
     android:paddingBottom="4dp" 
     android:textAppearance="@style/PagerTabStripText"/> 
+11

Nawiasem mówiąc, zaćmienie nie powoduje autosugestowania androida: textAppearance wewnątrz android.support.v4.view.PagerTabStrip. Ale nie dajcie się zwieść, textAppearance działa dla PagerTabStrip. –

+1

Potrzebuję użyć niestandardowego kroju czcionki dla mojego pagertabstrip. Masz pomysł, jak tego użyć? – ambit

+0

@Justin - właściwość 'textMultiLine' nie działa w ten sposób. W inny sposób? – Braj

4

PagerTabStrip nie aceppts textAppearance.

Jak @Justin powiedziane wyżej, ale na xml umieścić:

style="@style/PagerTabStripText"

nie:

android:textAppearance="@style/PagerTabStripText"

2

Jeśli chcesz projektować tytuł zakładki centrum odmiennie od innych , musisz użyć odbicia:

try { 
    final Class pagerTitleStripClass = PagerTitleStrip.class; 
    final Field mCurrTextField = pagerTitleStripClass.getDeclaredField("mCurrText"); 
    mCurrTextField.setAccessible(true); 

    // mTitle is my class's PagerTabStrip member variable 
    final TextView mCurrText = (TextView) mCurrTextField.get(mTitle); 
    mCurrText.setTypeface(Typeface.DEFAULT_BOLD); 
} catch (final Exception e) { 
    Log.w(TAG, "Exception when styling currently selected title!", e); 
} 

Niestety, to rozwiązanie może potencjalnie przestać działać po wydaniu aktualizacji dla Android Support Library (skąd pochodzi klasa PagerTitleStrip). W szczególności ta próbka kodu działa z revision 20.

+0

Ja osobiście nie polecam używania refleksji do tego rodzaju "sztuczek". Jest powód, dla którego jest prywatny - może się zmienić w dowolnym momencie - nawet podczas różnych zatwierdzeń tej samej wersji. Refleksja powinna być używana do tworzenia meta-poziomów, takich jak framework do pisania i inne. – kamathln

Powiązane problemy