Using a custom font in your Android app
This is a repost of an answer I wrote on Stack Overflow.

Beginning with Android 8.0 (API 26), there is native support for setting the fonts in XML. However, using the support library extends this down to Android 4.1 (API 16).
1. Add a font to your project
- Right click the
res
folder and go to New > Android Resource Directory. Typefont
as the name and font as the Resource type. - Copy and paste your font into the new
res/font
directory. I'm just using a single font in my example, the regular dancing script font. I renamed it todancing_script.ttf
just to avoid any potential naming problems with upper case or illegal characters.
2. Create a font-family
XML file.
- Right click the
res/font
folder and chooseNew > Font Resource File
. Call it whatever you want. I'm calling minemy_custom_font.xml
. - Paste in the following code. Note that the attributes are set twice, once for
android
(API 26+) and once forapp
(API 16+).
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto">
<font
android:fontStyle="normal"
android:fontWeight="400"
android:font="@font/dancing_script"
app:fontStyle="normal"
app:fontWeight="400"
app:font="@font/dancing_script"
/>
</font-family>
3. Set the font in XML
Now you can just use the fontFamily
attribute to set the font in XML.
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Hello World!"
android:fontFamily="@font/my_custom_font" />
Notes
- Read the documentation for more help.
- If you need to support pre-API 16, then just set the font programmatically.