Question

I Have a Custom View which draws text onto the Canvas. I want to change the font to a font stored in the assets folder.

I am using Android Studio so I created a folder src/main/assets and placed my ttf files in there.

Paint txt = new Paint()
Typeface font = Typeface.createFromAsset(getAssets(), "robotobold.ttf");
txt.setTypeface(font);

Problem is Android Studio doesn't recognize getAssets() inside my Custom View, however, it recognizes it inside my Activity. I have tried passing Typeface through from my Activity but when I do it it doesn't change the font.

Was it helpful?

Solution

You can use your View's getContext() method to get the current Context, then use it to get the assets:

Typeface font = Typeface.createFromAsset(getContext().getAssets(), "robotobold.ttf");

OTHER TIPS

First of all, you have to keep your assets folder inside your project and not inside src/main.. And then, create a folder called fonts inside assets. then, put the specific font typeface ttf files inside it.You can use the font typeface in coding like:

Typeface type = Typeface.createFromAsset(getAssets(),"fonts/filename.ttf");
textview.setTypeface(type);

created a folder src/main/assets and placed font files in there.

in Activity

Typeface font = Typeface.createFromAsset(getAssets(),  "Mukta-Regular.ttf");
tv.setTypeface(font);

in Fragment

Typeface.createFromAsset(getActivity().getAssets(), "Mukta-Regular.ttf");
tv.setTypeface(font);

In order to reuse typefaces in my projects I create a class full of typeface methods, this way I dont have to create a new typeface every time.

I call the class FontClass and in the class there is a method for each typeface I need to use e.g:

public static Typeface getOpenSansRegular(Context c){
    return Typeface.createFromAsset(c.getAssets(), "OpenSans-Light.ttf");
}

Then I can use them like so:

TextView text = (TextView) findViewById(R.id.textview);
text.setTypeface(FontClass.getOpenSansRegular(getApplicationContext());

You have to place your assets folder inside "Project" folder and not in the "src" folder. You have placed your font in the "src/main/assets/robotobold.ttf" that's why it is not working. You need to place it like this "/assets/robotobold.ttf".

    Typeface robo = Typeface.createFromAsset(getActivity().getAssets(), "fonts/Roboto-Thin.ttf");

My mistake was adding the line

Typeface mFont = Typeface.createFromAsset(this.getAssets(), "abc.ttf");

before onCreate()

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top