How do I specify eg. Roboto-Medium or Roboto-Black in styles.xml
On Android 5.0 you can set Roboto Medium with sans-serif-medium
.
This solution, taken from Google iosched 2014, uses sans-serif
on Android pre-v21:
values/styles.xml
<style name="MyStyle">
<item name="android:fontFamily">@string/font_fontFamily_medium</item>
</style>
values/fonts.xml
<string name="font_fontFamily_medium">sans-serif</string>
values-v21/fonts.xml
<string name="font_fontFamily_medium">sans-serif-medium</string>
NEW SOLUTION
After Google I/O '17 you can create multiple font family in res/font folder
<?xml version="1.0" encoding="utf-8"?>
<font-family xmlns:app="http://schemas.android.com/apk/res-auto">
<font
app:font="@font/roboto_light"
app:fontStyle="normal"
app:fontWeight="300" />
<font
app:font="@font/roboto_bold"
app:fontStyle="normal"
app:fontWeight="700" />
</font-family>
and you can use wherever want
<style name="AppTheme.DefaultTextView" parent="android:style/Widget.TextView">
<item name="android:textColor">@color/colorBlack</item>
<item name="android:fontFamily">@font/font_family_roboto</item>
</style>
OLD ANSWER
Thanks for Jakob Eriksson
original answer
android:fontFamily="sans-serif" // roboto regular
android:fontFamily="sans-serif-light" // roboto light
android:fontFamily="sans-serif-condensed" // roboto condensed
android:fontFamily="sans-serif-black" // roboto black
android:fontFamily="sans-serif-thin" // roboto thin (android 4.2)
android:fontFamily="sans-serif-medium" // roboto medium (android 5.0)
in style:
<style name="AppTheme.DefaultTextView" parent="android:style/Widget.TextView">
<item name="android:textSize">@dimen/text_view_text_size</item>
<item name="android:textColor">@color/black</item>
<item name="android:fontFamily">sans-serif-light</item>
<item name="android:textStyle">normal</item>
</style>
in app theme:
<style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/gray</item>
<item name="android:textViewStyle">@style/AppTheme.DefaultTextView</item>
</style>
Support Library 26 introduced using fonts in XML, and it's backwards compatible to Android API 14.
To add fonts as resources, perform the following steps in the Android Studio:
Right-click the res folder and go to New > Android resource directory. The New Resource Directory window appears.
In the Resource type list, select font, and then click OK. Note: The name of the resource directory must be font.
- Add your font files in the font folder.
The folder structure below generates
R.font.dancing_script
,R.font.lobster
, andR.font.typo_graphica
.
- Double-click a font file to preview the file's fonts in the editor.
To set a font for the TextView
, in the layout XML file, set the fontFamily attribute to the font file you want to access.
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:fontFamily="@font/lobster"/>
The Android Studio layout preview allows you to preview the font set in the TextView.
To add a font to a style, Open the styles.xml, and set the fontFamily attribute to the font file you want to access.
<style name="customfontstyle" parent="@android:style/TextAppearance.Small">
<item name="android:fontFamily">@font/lobster</item>
If you don't want to bundle the fonts in your app, you can always look into Downloadable Fonts
I suggest you to use custom libraries like Android-RobotoTextView or Calligraphy. With one of these you can set the font of a view in xml with an attribute so you can put in in styles.xml . And they works with previous version of Android than 4.0