How (if possible) could I set a custom font in a ActionBar title text(only - not the tab text) with a font in my assets folder? I don't want to use the android:logo option.

14 Answers 11

up vote 198 down vote accepted

I agree that this isn't completely supported, but here's what I did. You can use a custom view for your action bar (it will display between your icon and your action items). I'm using a custom view and I have the native title disabled. All of my activities inherit from a single activity, which has this code in onCreate:

this.getActionBar().setDisplayShowCustomEnabled(true);
this.getActionBar().setDisplayShowTitleEnabled(false);

LayoutInflater inflator = LayoutInflater.from(this);
View v = inflator.inflate(R.layout.titleview, null);

//if you need to customize anything else about the text, do it here.
//I'm using a custom TextView with a custom font in my layout xml so all I need to do is set title
((TextView)v.findViewById(R.id.title)).setText(this.getTitle());

//assign the view to the actionbar
this.getActionBar().setCustomView(v);

And my layout xml (R.layout.titleview in the code above) looks like this:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:background="@android:color/transparent" >

<com.your.package.CustomTextView
        android:id="@+id/title"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_centerVertical="true"
            android:layout_marginLeft="10dp"
            android:textSize="20dp"
            android:maxLines="1"
            android:ellipsize="end"
            android:text="" />
</RelativeLayout>
1 upvote
  flag
This works fine for the title but if you want a title and tabs it places the custom view to the right of the tabs not left like the title would be. I would love to be able to alter the actual title. – draksia
2 upvote
  flag
Great solution. If you need a custom text view class that allows specification of the font in XML, please try mine! github.com/tom-dignan/nifty -- it's very easy. – Thomas Dignan
upvote
  flag
Does this code have to be in onCreate()? I need to set it dynamically outside of my activity... – Igor Ganapolsky
upvote
  flag
you need to change the font dynamically? or are you just looking to change the title once the font is already customized? – Sam Dozor
upvote
  flag
I don't see any reference to any font in this solution. – AlikElzin-kilaka
upvote
  flag
as I mentioned in the answer, I subclassed TextView and used that class in my layout above. In my custom TextView, I override setTypeface, like in this answer: //allinonescript.com/questions/8954484/… – Sam Dozor
2 upvote
  flag
This works, but it is way to much work. Plus: you lose some features of the standard title, like having it highlighted when the icon is clicked... Custom titles are not meant to be used to re-create the standard title layout only to change the fonts... – Zordid
upvote
  flag
@SamDozor whats CustomTextView class to use this sample? – user4001049
upvote
  flag
@andbee here's an example: //allinonescript.com/questions/2376250/…, alternatively you could also just call setTypeface on a regular TextView from within your Activity. – Sam Dozor

It's an ugly hack but you can do it like this (since action_bar_title is hidden) :

    try {
        Integer titleId = (Integer) Class.forName("com.android.internal.R$id")
                .getField("action_bar_title").get(null);
        TextView title = (TextView) getWindow().findViewById(titleId);
        // check for null and manipulate the title as see fit
    } catch (Exception e) {
        Log.e(TAG, "Failed to obtain action bar title reference");
    }

This code is for post-GINGERBREAD devices but this can be easily extended to work with actionbar Sherlock as well

P.S. Based on @pjv comment there's a better way to find action bar title id

final int titleId = 
    Resources.getSystem().getIdentifier("action_bar_title", "id", "android");
4 upvote
  flag
I prefer dtmilano's answer in //allinonescript.com/questions/10779037/…. It's similar but slightly more future proof. – pjv
1 upvote
  flag
@pjv - agreed. Seems less "hacky". I modified my answer – Bostone
1 upvote
  flag
So the question is about custom font. This answers how to get the text view of the default actionbar. – AlikElzin-kilaka
upvote
  flag
@kilaka - the idea was that if you get the text view setting the custom font would be trivial. This is an old post though, I think twaddington answer is much preferred – Bostone

You can do this using a custom TypefaceSpan class. It's superior to the customView approach indicated above because it doesn't break when using other Action Bar elements like expanding action views.

The use of such a class would look something like this:

SpannableString s = new SpannableString("My Title");
s.setSpan(new TypefaceSpan(this, "MyTypeface.otf"), 0, s.length(),
        Spannable.SPAN_EXCLUSIVE_EXCLUSIVE);

// Update the action bar title with the TypefaceSpan instance
ActionBar actionBar = getActionBar();
actionBar.setTitle(s);

The custom TypefaceSpan class is passed your Activity context and the name of a typeface in your assets/fonts directory. It loads the file and caches a new Typeface instance in memory. The complete implementation of TypefaceSpan is surprisingly simple:

/**
 * Style a {@link Spannable} with a custom {@link Typeface}.
 * 
 * @author Tristan Waddington
 */
public class TypefaceSpan extends MetricAffectingSpan {
      /** An <code>LruCache</code> for previously loaded typefaces. */
    private static LruCache<String, Typeface> sTypefaceCache =
            new LruCache<String, Typeface>(12);

    private Typeface mTypeface;

    /**
     * Load the {@link Typeface} and apply to a {@link Spannable}.
     */
    public TypefaceSpan(Context context, String typefaceName) {
        mTypeface = sTypefaceCache.get(typefaceName);

        if (mTypeface == null) {
            mTypeface = Typeface.createFromAsset(context.getApplicationContext()
                    .getAssets(), String.format("fonts/%s", typefaceName));

            // Cache the loaded Typeface
            sTypefaceCache.put(typefaceName, mTypeface);
        }
    }

    @Override
    public void updateMeasureState(TextPaint p) {
        p.setTypeface(mTypeface);

        // Note: This flag is required for proper typeface rendering
        p.setFlags(p.getFlags() | Paint.SUBPIXEL_TEXT_FLAG);
    }

    @Override
    public void updateDrawState(TextPaint tp) {
        tp.setTypeface(mTypeface);

        // Note: This flag is required for proper typeface rendering
        tp.setFlags(tp.getFlags() | Paint.SUBPIXEL_TEXT_FLAG);
    }
}

Simply copy the above class into your project and implement it in your activity's onCreate method as shown above.

19 upvote
  flag
Nice answer. Whats good to see is that you have also shown a way to cache the typeface element. – Anand Sainath
11 upvote
  flag
This should be the accepted answer. thanks! – jsb
2 upvote
  flag
This is amazing. Thank you. – Brayden
6 upvote
  flag
This is excellent. One gotcha - if the textAllCaps attribute is set to true on the underlying TextView (e.g. via a theme), then the custom font won't appear. This was an issue for me when I applied this technique to the action bar tab items. – James
3 upvote
  flag
Note that this implementation of the class assumes that you put your font files in assets/fonts/. If you just throw the .ttf/.otf files under assets and not in a subfolder, you should modify the following line of code accordingly: String.format("fonts/%s", typefaceName). I lost good 10 minutes trying to figure it out. If you don't, you will get java.lang.RuntimeException: Unable to start activity ComponentInfo{com.your.pckage}: java.lang.RuntimeException: native typeface cannot be made – hasMobi - Android Apps
1 upvote
  flag
In the moment of starting the app, the default title style is visible and about 1 sec later the custom style appears. Bad UI... – Lost in OWL
upvote
  flag
@artworkad that's because your activity's theme is being applied to the DecorView before your code has spun up. You can work around this by hiding the action bar in your theme, then show it as your activity is being created. – twaddington
upvote
  flag
@twaddington ok, good catch. It would be the perfect solution if we could load the title string from the activity definition in the manifest – Lost in OWL
2 upvote
  flag
@artworkadシ oh, but you can! gist.github.com/twaddington/8035951 – twaddington
upvote
  flag
Simple amazing! Congratulations for the very good answer! – andresmafra
upvote
  flag
This solution is simple, yet it is full of problems and flaws, for example orientation changes. You cannot pass on any CharSequences in Bundles, thus you have to manage it all by yourself. You have to make sure that whatever happens, the same title (and sub title if you use them!) reappear exactly as before. Not always easy!! – Zordid
upvote
  flag
@Zordid I'm not sure what you're doing, but so long as you set your ActionBar title in onCreate you shouldn't have any issues. – twaddington
upvote
  flag
Thanks! This should be the accepted answer! – rrbrambley
upvote
  flag
@twaddington My title changes, triggered from Fragments and their contents. "Normal" titles survive, because the action bar saves its current contents - but only as a String. Any other non-parcelable objects should never be brought from one instance of an Activity to another, thus the TypefaceSpan will be lost after orientation change... – Zordid
1 upvote
  flag
@Zordid the solution is to simply reapply your title when your activity restarts based on which Fragment is visible. – twaddington
upvote
  flag
This should be checked as the correct answer. – もっくん
upvote
  flag
Thanks. This is a better solution than the accepted answer. – hitmaneidos
upvote
  flag
Where is the try-catch block implemented in gist.github.com/twaddington/8035951 – Rohit Tigga
upvote
  flag
where do i donate – styler1972
upvote
  flag
How to "Hide the action bar in your theme, then show it as your activity is being created" ? – Rohit Tigga
upvote
  flag
This solution changed the font for a second and then the font went back to what it was before, when I added a fragment – J. K.
upvote
  flag
@J.K. is the fragment calling setTitle? It may be overriding the toolbar title. – twaddington
1 upvote
  flag
This is a great answer and helped me out a ton. One improvement I would add would be to move the caching mechanism into its own class outside of TypefaceSpan. I ran into other situations where I was using a Typeface without a span and this allowed me to take advantage of the cache in those situations as well. – Justin
upvote
  flag
@twaddington nice answer! but i have a tiny problem; it stands a little bit upper than what it was before. Is there any solution? – Who am i

To add to @Sam_D's answer, I had to do this to make it work:

this.setTitle("my title!");
((TextView)v.findViewById(R.id.title)).setText(this.getTitle());
TextView title = ((TextView)v.findViewById(R.id.title));
title.setEllipsize(TextUtils.TruncateAt.MARQUEE);
title.setMarqueeRepeatLimit(1);
// in order to start strolling, it has to be focusable and focused
title.setFocusable(true);
title.setSingleLine(true);
title.setFocusableInTouchMode(true);
title.requestFocus();

It seems like overkill - referencing v.findViewById(R.id.title)) twice - but that's the only way it would let me do it.

int titleId = getResources().getIdentifier("action_bar_title", "id",
            "android");
    TextView yourTextView = (TextView) findViewById(titleId);
    yourTextView.setTextColor(getResources().getColor(R.color.black));
    yourTextView.setTypeface(face);
upvote
  flag
Extremely easy to use. – hugohabel
3 upvote
  flag
how come this solution is not voted up a lot?????? it works and it is very simple. Thanks Vazeer – Mahmoud Badri
1 upvote
  flag
This should be the preferred answer to the question. Works great, also with "action_bar_subtitle"! Thanks! – Zordid
14 upvote
  flag
if the android developers in a newer version change the resource id from "action_bar_title" to other name, then nothing of this will work. that's why it's not so up voted. – Diogo Bento
5 upvote
  flag
Works on api >3.0 but not in 2.x for appcompat – Aman Singhal
upvote
  flag
Thanks. This version supports necessary functions like .setText(). Great solution! – Matthew Cordaro
upvote
  flag
simplest solution ... great!! – rags
1 upvote
  flag
This does change the font & everything. But when I goto next Activity & press back the font gets reverted. I guess it has something to do with ActionBar properties. – Pranav Mahajan
upvote
  flag
Does it still work? – Rohit Tigga
upvote
  flag
in android 2.3 not worked. – Mahdi-bagvand
upvote
  flag
@PranavMahajan I have exactly the same problem. Did you found a solution? – erdomester
11 upvote
  flag
@Digit: That worked great for the "Holo Theme", but doesn't for the "Material Theme" (android L). The titleId is found, but the textview is null.. any ideas how to fix this? thanks! – Michael D.
upvote
  flag
The best answer !! Positive feedback !! xD – KryNaC
upvote
  flag
@MichaelD. Unless its too late you could use mToolbar.setTitleTextColor(Color.WHITE); – humblerookie
upvote
  flag
This method seemed to stop working for me when the device updated to 5.1.1 – gnichola

Following code will work for all the versions. I did checked this in a device with gingerbread as well as on JellyBean device

 private void actionBarIdForAll()
    {
        int titleId = 0;

        if(Build.VERSION.SDK_INT>=Build.VERSION_CODES.HONEYCOMB)
        {
            titleId = getResources().getIdentifier("action_bar_title", "id", "android");
        }
        else
        {
          // This is the id is from your app's generated R class when ActionBarActivity is used for SupportActionBar

            titleId = R.id.action_bar_title;
        }

        if(titleId>0)
        {
            // Do whatever you want ? It will work for all the versions.

            // 1. Customize your fonts
            // 2. Infact, customize your whole title TextView

            TextView titleView = (TextView)findViewById(titleId);
            titleView.setText("RedoApp");
            titleView.setTextColor(Color.CYAN);
        }
    }
upvote
  flag
This works for me on both ActionBar and the AppCompat ActionBar. But the latter only works if I try to find the title view after onCreate(), so for example placing it to onPostCreate() does the trick. – Harri

The Calligraphy library let's you set a custom font through the app theme, which would also apply to the action bar.

<style name="AppTheme" parent="android:Theme.Holo.Light.DarkActionBar">
<item name="android:textViewStyle">@style/AppTheme.Widget.TextView</item>
</style>

<style name="AppTheme.Widget"/>

<style name="AppTheme.Widget.TextView" parent="android:Widget.Holo.Light.TextView">
   <item name="fontPath">fonts/Roboto-ThinItalic.ttf</item>
</style>

All it takes to activate Calligraphy is attaching it to your Activity context:

@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(new CalligraphyContextWrapper(newBase));
}

The default custom attribute is fontPath, but you may provide your own custom attribute for the path by initializing it in your Application class with CalligraphyConfig.Builder. Usage of android:fontFamily has been discouraged.

upvote
  flag
Min API 16 for this solution – Sami Eltamawy
upvote
  flag
minSdk 7 according to the project's build file, but I'm using this in a minSdk 18 project and didn't do any further checking on that. What is the offending method used? – thoutbeckers
upvote
  flag
Its min API 7, Just the example is API16. it supports appcompat-v7+ – Chris.Jenkins

If you want to set typeface to all the TextViews in the entire Activity you can use something like this:

public static void setTypefaceToAll(Activity activity)
{
    View view = activity.findViewById(android.R.id.content).getRootView();
    setTypefaceToAll(view);
}

public static void setTypefaceToAll(View view)
{
    if (view instanceof ViewGroup)
    {
        ViewGroup g = (ViewGroup) view;
        int count = g.getChildCount();
        for (int i = 0; i < count; i++)
            setTypefaceToAll(g.getChildAt(i));
    }
    else if (view instanceof TextView)
    {
        TextView tv = (TextView) view;
        setTypeface(tv);
    }
}

public static void setTypeface(TextView tv)
{
    TypefaceCache.setFont(tv, TypefaceCache.FONT_KOODAK);
}

And the TypefaceCache:

import java.util.TreeMap;

import android.graphics.Typeface;
import android.widget.TextView;

public class TypefaceCache {

    //Font names from asset:
    public static final String FONT_ROBOTO_REGULAR = "fonts/Roboto-Regular.ttf";
    public static final String FONT_KOODAK = "fonts/Koodak.ttf";

    private static TreeMap<String, Typeface> fontCache = new TreeMap<String, Typeface>();

    public static Typeface getFont(String fontName) {
        Typeface tf = fontCache.get(fontName);
        if(tf == null) {
            try {
                tf = Typeface.createFromAsset(MyApplication.getAppContext().getAssets(), fontName);
            }
            catch (Exception e) {
                return null;
            }
            fontCache.put(fontName, tf);
        }
        return tf;
    }

    public static void setFont(TextView tv, String fontName)
    {
        tv.setTypeface(getFont(fontName));
    }
}

use new toolbar in support library design your actionbar as your own or use below code

Inflating Textview is not an good option try Spannable String builder

Typeface font2 = Typeface.createFromAsset(getAssets(), "fonts/<your font in assets folder>");   
SpannableStringBuilder SS = new SpannableStringBuilder("MY Actionbar Tittle");
SS.setSpan (new CustomTypefaceSpan("", font2), 0, SS.length(),Spanned.SPAN_EXCLUSIVE_INCLUSIVE);
actionBar.setTitle(ss);

copy below class

public class CustomTypefaceSpan extends TypefaceSpan{

    private final Typeface newType;

    public CustomTypefaceSpan(String family, Typeface type) {
        super(family);
        newType = type;
    }

    @Override
    public void updateDrawState(TextPaint ds) {
        applyCustomTypeFace(ds, newType);
    }

    @Override
    public void updateMeasureState(TextPaint paint) {
        applyCustomTypeFace(paint, newType);
    }

    private static void applyCustomTypeFace(Paint paint, Typeface tf) {
        int oldStyle;
        Typeface old = paint.getTypeface();
        if (old == null) {
            oldStyle = 0;
        } else {
            oldStyle = old.getStyle();
        }

        int fake = oldStyle & ~tf.getStyle();
        if ((fake & Typeface.BOLD) != 0) {
            paint.setFakeBoldText(true);
        }

        if ((fake & Typeface.ITALIC) != 0) {
            paint.setTextSkewX(-0.25f);
        }

        paint.setTypeface(tf);
    }

}
1 upvote
  flag
This is the best answer! – User3
1 upvote
  flag
This is the best!!! yes! – Rafael Ruiz
1 upvote
  flag
wow work like a charm... – dreamfighter
upvote
  flag
This really made my day,thank you – Eмαd

TRY THIS

public void findAndSetFont(){
        getActionBar().setTitle("SOME TEST TEXT");
        scanForTextViewWithText(this,"SOME TEST TEXT",new SearchTextViewInterface(){

            @Override
            public void found(TextView title) {

            } 
        });
    }

public static void scanForTextViewWithText(Activity activity,String searchText, SearchTextViewInterface searchTextViewInterface){
    if(activity == null|| searchText == null || searchTextViewInterface == null)
        return;
    View view = activity.findViewById(android.R.id.content).getRootView();
    searchForTextViewWithTitle(view, searchText, searchTextViewInterface);
}

private static void searchForTextViewWithTitle(View view, String searchText, SearchTextViewInterface searchTextViewInterface)
{
    if (view instanceof ViewGroup)
    {
        ViewGroup g = (ViewGroup) view;
        int count = g.getChildCount();
        for (int i = 0; i < count; i++)
            searchForTextViewWithTitle(g.getChildAt(i), searchText, searchTextViewInterface);
    }
    else if (view instanceof TextView)
    {
        TextView textView = (TextView) view;
        if(textView.getText().toString().equals(searchText))
            if(searchTextViewInterface!=null)
                searchTextViewInterface.found(textView);
    }
}
public interface SearchTextViewInterface {
    void found(TextView title);
}

We need to use reflections for achieving this

final int titleId = activity.getResources().getIdentifier("action_bar_title", "id", "android");

    final TextView title;
    if (activity.findViewById(titleId) != null) {
        title = (TextView) activity.findViewById(titleId);
        title.setTextColor(Color.BLACK);
        title.setTextColor(configs().getColor(ColorKey.GENERAL_TEXT));
        title.setTypeface(configs().getTypeface());
    } else {
        try {
            Field f = bar.getClass().getDeclaredField("mTitleTextView");
            f.setAccessible(true);
            title = (TextView) f.get(bar);
            title.setTextColor(Color.BLACK);
            title.setTypeface(configs().getTypeface());
        } catch (NoSuchFieldException e) {
        } catch (IllegalAccessException e) {
        }
    }

To update the correct answer.

firstly : set the title to false, because we are using custom view

    actionBar.setDisplayShowTitleEnabled(false);

secondly : create titleview.xml

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   android:layout_width="match_parent"
   android:layout_height="match_parent"
   android:background="@android:color/transparent" >

    <TextView
       android:id="@+id/title"
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_centerVertical="true"
       android:layout_marginLeft="10dp"
       android:textSize="20dp"
       android:maxLines="1"
       android:ellipsize="end"
       android:text="" />

</RelativeLayout>

Lastly :

//font file must be in the phone db so you have to create download file code
//check the code on the bottom part of the download file code.

   TypeFace font = Typeface.createFromFile("/storage/emulated/0/Android/data/"   
    + BuildConfig.APPLICATION_ID + "/files/" + "font name" + ".ttf");

    if(font != null) {
        LayoutInflater inflator = LayoutInflater.from(this);
        View v = inflator.inflate(R.layout.titleview, null);
        TextView titleTv = ((TextView) v.findViewById(R.id.title));
        titleTv.setText(title);
        titleTv.setTypeface(font);
        actionBar.setCustomView(v);
    } else {
        actionBar.setDisplayShowTitleEnabled(true);
        actionBar.setTitle("  " + title); // Need to add a title
    }

DOWNLOAD FONT FILE : because i am storing the file into cloudinary so I have link on it to download it.

/**downloadFile*/
public void downloadFile(){
    String DownloadUrl = //url here
    File file = new File("/storage/emulated/0/Android/data/" + BuildConfig.APPLICATION_ID + "/files/");
    File[] list = file.listFiles();
    if(list == null || list.length <= 0) {
        BroadcastReceiver onComplete = new BroadcastReceiver() {
            @Override
            public void onReceive(Context context, Intent intent) {
                try{
                    showContentFragment(false);
                } catch (Exception e){
                }
            }
        };

        registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
        DownloadManager.Request request = new DownloadManager.Request(Uri.parse(DownloadUrl));
        request.setVisibleInDownloadsUi(false);
        request.setDestinationInExternalFilesDir(this, null, ModelManager.getInstance().getCurrentApp().getRegular_font_name() + ".ttf");
        DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
        manager.enqueue(request);
    } else {
        for (File files : list) {
            if (!files.getName().equals("font_name" + ".ttf")) {
                BroadcastReceiver onComplete = new BroadcastReceiver() {
                    @Override
                    public void onReceive(Context context, Intent intent) {
                        try{
                            showContentFragment(false);
                        } catch (Exception e){
                        }
                    }
                };

                registerReceiver(onComplete, new IntentFilter(DownloadManager.ACTION_DOWNLOAD_COMPLETE));
                DownloadManager.Request request = new DownloadManager.Request(Uri.parse(DownloadUrl));
                request.setVisibleInDownloadsUi(false);
                request.setDestinationInExternalFilesDir(this, null, "font_name" + ".ttf");
                DownloadManager manager = (DownloadManager) getSystemService(Context.DOWNLOAD_SERVICE);
                manager.enqueue(request);
            } else {
                showContentFragment(false);
                break;
            }
        }
    }
}

I just did the following inside the onCreate() function:

TypefaceSpan typefaceSpan = new TypefaceSpan("font_to_be_used");
SpannableString str = new SpannableString("toolbar_text");
str.setSpan(typefaceSpan,0, str.length(), Spanned.SPAN_EXCLUSIVE_EXCLUSIVE);
getSupportActionBar().setTitle(str);

I am using the Support Libraries, if you are not using them I guess you should switch to getActionBar() instead of getSupportActionBar().

In Android Studio 3 you can add custom fonts following this instructions https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html and then use your newly added font in "font_to_be_used"

From Android Support Library v26 + Android Studio 3.0 onwards, this process has become easy as a flick!!

Follow these steps to change the font of Toolbar Title:

  1. Read Downloadable Fonts & select any font from the list (my recommendation) or load a custom font to res > font as per Fonts in XML
  2. In res > values > styles, paste the following (use your imagination here!)

    <style name="TitleBarTextAppearance" parent="android:TextAppearance">
        <item name="android:fontFamily">@font/your_desired_font</item>
        <item name="android:textSize">23sp</item>
        <item name="android:textStyle">bold</item>
        <item name="android:textColor">@android:color/white</item>
    </style>
    
  3. Insert a new line in your Toolbar properties app:titleTextAppearance="@style/TextAppearance.TabsFont" as shown below

    <android.support.v7.widget.Toolbar
        android:id="@+id/toolbar"
        android:layout_width="match_parent"
        android:layout_height="?attr/actionBarSize"
        android:background="?attr/colorPrimary"
        app:titleTextAppearance="@style/TitleBarTextAppearance"
        app:popupTheme="@style/AppTheme.PopupOverlay"/>
    
  4. Enjoy Custom Actionbar Title font styling!!

Not the answer you're looking for? Browse other questions tagged or ask your own question.