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");
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
.
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()