Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

How to set TextStyle of PagerTabStrip to Bold?

I'm using PagerTabStrip in ViewPager to show the title of each page. Here is my XML code:

<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>

I want to set the textStyle to bold in PagerTabStrip like this: android:textStyle="bold". But this is not possible in PagerTabStrip. Seems like it has only textcolor property for text. What is the way by which I can set the style to bold?

like image 901
Jainendra Avatar asked Nov 09 '12 12:11

Jainendra


3 Answers

What you need to do is create a style for the text, and then use the android:textAppearance attribute...

Perhaps something like this:

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

And then in your PagerTabStrip XML do this:

 <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"/>
like image 100
Justin Avatar answered Oct 24 '22 06:10

Justin


PagerTabStrip doesn't aceppts textAppearance.

Like @Justin said above, but on xml put:

style="@style/PagerTabStripText"

not:

android:textAppearance="@style/PagerTabStripText"

like image 32
Igor Romcy Avatar answered Oct 24 '22 08:10

Igor Romcy


If you'd like to style the center tab title differently from the others, then you'll need to use reflection:

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

Unfortunately, this solution is subject to potentially not working anymore when updates for the Android Support Library are released (as that's where the PagerTitleStrip class is from). In particular, this code sample is working with revision 20.

like image 2
Charles Madere Avatar answered Oct 24 '22 06:10

Charles Madere