A full example of custom fonts in XML using data binding and including font caching.
Fonts in XML are now supported by the Android support library as of 26.0, including in styles and themes. I recommend using the support library and IDE integration for all your modern font needs!
https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html#using-support-lib
Easy custom fonts in XML using data binding.
No setup required, no extra Java code, and no custom views.
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:font="@{`alegreya`}"
/>
This example includes a simple font cache that automatically loads names from your assets/fonts
folder and lazy-loads typefaces. Just drag and drop font files and use them in XML by their normal or lowercase filenames (e.g. “Roboto-Italic” or “roboto-italic” for Roboto-Italic.otf
). That’s it!
Make sure to use the data binding framework to inflate your layout.
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
DataBindingUtil.setContentView(this, R.layout.activity_main);
}
}
More about data binding: http://developer.android.com/tools/data-binding/guide.html
You can set custom names for your fonts, but you don’t have to.
FontCache.getInstance().addFont("alegreya", "Alegreya-Regular.ttf");
It’s not currently possible to define custom attributes in styles using data binding. If you require this, check out Calligraphy by Chris Jenx.