Android pro tip: One-line custom fonts in XML with data binding!

I started playing with data binding last night for real, and I'm amazed by the power it gives you.  Check out this one-liner to set a custom font on a TextView:

@BindingAdapter({"bind:font"})
public static void setFont(TextView textView, String fontName){
 textView.setTypeface(Typeface.createFromAsset(textView.getContext().getAssets(), "fonts/" + fontName));
}

In XML:
<TextView
app:font="@{`Source-Sans-Pro-Regular.ttf`}"
android:layout_width="wrap_content"
android:layout_height="wrap_content"/>

Previously, this used to take endless lines of repetitive Java code (one for each TextView!). The missing custom typeface support in TextView has been a grievance held against the Android platform for years.  There's even an inventive library to address it[2]. Data binding makes all of that obselete.  If you can't tell, I'm in love!!  It's terse, powerful, and one of the biggest leaps forward I've seen for Android productivity.

As usual, you need to put your font file in assets/fonts/, and make sure to include the data binding framework.  

EDIT: I've published FontBinding, a full example of using this technique with a lazy-loading font cache, on Github!
https://github.com/lisawray/fontbinding

[1] https://developer.android.com/tools/data-binding/guide.html
[2] Calligraphy: https://github.com/chrisjenx/Calligraphy
Photo
Shared publiclyView activity