You are able to not to reinvent the wheel, if you would use Calligraphy library. All you need to do is override onCreate() method in your application class like this:
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/Roboto-RobotoRegular.ttf")
.setFontAttrId(R.attr.fontPath)
.build()
And then inject into context (it will work for whole app, if you'll declare it in the BaseActivity of your app):
@Override
protected void attachBaseContext(Context newBase) {
super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}
Now you can use custom fonts in your UI elements like this:
<TextView
android:text="@string/hello_world"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
fontPath="fonts/Roboto-Bold.ttf"/>
Don't forget to specify application class in your manifest. Good luck!