I'm defining a style XML for my android app. I have some TTF files I want to use, how can I set the typeface to use those files as the font as opposed to the generic "sans", "serif" & "monospace". Thanks
6 Answers
You can only use custom fonts via Java code, not through layout XML or styles/themes -- sorry!
5 Comments
TextViewPlus.java:
package com.example; import android.content.Context; import android.content.res.TypedArray; import android.graphics.Typeface; import android.util.AttributeSet; import android.util.Log; import android.widget.TextView; public class TextViewPlus extends TextView { private static final String TAG = "TextView"; public TextViewPlus(Context context) { super(context); } public TextViewPlus(Context context, AttributeSet attrs) { super(context, attrs); setCustomFont(context, attrs); } public TextViewPlus(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); setCustomFont(context, attrs); } private void setCustomFont(Context ctx, AttributeSet attrs) { TypedArray a = ctx.obtainStyledAttributes(attrs, R.styleable.TextViewPlus); String customFont = a.getString(R.styleable.TextViewPlus_customFont); setCustomFont(ctx, customFont); a.recycle(); } public boolean setCustomFont(Context ctx, String asset) { Typeface tf = null; try { tf = Typeface.createFromAsset(ctx.getAssets(), asset); } catch (Exception e) { Log.e(TAG, "Could not get typeface: "+e.getMessage()); return false; } setTypeface(tf); return true; } } attrs.xml: (in res/values)
<?xml version="1.0" encoding="utf-8"?> <resources> <declare-styleable name="TextViewPlus"> <attr name="customFont" format="string"/> </declare-styleable> </resources> main.xml:
<?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:foo="http://schemas.android.com/apk/res/com.example" android:orientation="vertical" android:layout_width="fill_parent" android:layout_height="fill_parent"> <com.example.TextViewPlus android:id="@+id/textViewPlus1" android:layout_height="match_parent" android:layout_width="match_parent" android:text="@string/showingOffTheNewTypeface" foo:customFont="saxmono.ttf"> </com.example.TextViewPlus> </LinearLayout> You would put "saxmono.ttf" in the assets folder.
Comments
Yes, you can :)
step 1: Create a folder and name it 'font' and put your .ttf inside it. 
step 2: Go to style.xml and do the following : - 
step 3: Use the style tag anywhere in views(TextView, TabLayout,..etc.):-
2 Comments
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="CodeFont" parent="@android:style/TextAppearance.Medium"> <item name="android:layout_width">fill_parent</item> <item name="android:layout_height">wrap_content</item> <item name="android:textColor">#00FF00</item> <item name="android:typeface">monospace</item> </style> </resources> 2 Comments
Create a font dir on resource folder and paste your ttf font file. Then create a font resource XML and paste following lines.
<?xml version="1.0" encoding="utf-8"?> <font-family xmlns:android="http://schemas.android.com/apk/res/android"> <font android:fontStyle="normal" android:fontWeight="400" android:font="@font/roboto_light" /> <font android:fontStyle="italic" android:fontWeight="400" android:font="@font/roboto_light_italic" /> </font-family> Now you can apply font as below. Also note attribute 'textStyle'
<TextView android:textStyle="italic" android:fontFamily="@font/family_roboto_light" android:textColor="@color/primaryTextColor" android:textSize="20sp" android:gravity="center" android:id="@+id/textView36" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="No Internet connection" /> <TextView android:fontFamily="@font/family_roboto_light" android:textStyle="normal" android:textSize="20sp" android:gravity="center" android:id="@+id/textView37" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="No Internet connection" /> If you want done from code use following, but minimum API level 26
Typeface typeface = getResources().getFont(R.font. roboto_light_italic); textView.setTypeface(typeface); The Support Library 26.0 provides support to the Fonts in XML feature on devices running Android 4.1 (API level 16) and higher.
Typeface typeface = ResourcesCompat.getFont(context, R.font. roboto_light_italic); Comments
This works for me
<?xml version="1.0" encoding="utf-8"?> <resources> <style name="raffle_view_toolbar_style"> <item name="android:fontFamily">@font/press_start_2p</item> </style> </resources> Using Google Font
<?xml version="1.0" encoding="utf-8"?> <font-family xmlns:app="http://schemas.android.com/apk/res-auto" app:fontProviderAuthority="com.google.android.gms.fonts" app:fontProviderPackage="com.google.android.gms" app:fontProviderQuery="Press Start 2P" app:fontProviderCerts="@array/com_google_android_gms_fonts_certs"> </font-family> Downloaded in Android Studio

