Custom Fonts and Custom Textview on Android Custom Fonts and Custom Textview on Android android android

Custom Fonts and Custom Textview on Android


The constructor of TextView calls setTypeface(Typeface tf, int style) with the style parameter retrieved from the XML attribute android:textStyle. So, if you want to intercept this call to force your own typeface you can override this method as follow:

public void setTypeface(Typeface tf, int style) {    Typeface normalTypeface = Typeface.createFromAsset(getContext().getAssets(), "font/your_normal_font.ttf");    Typeface boldTypeface = Typeface.createFromAsset(getContext().getAssets(), "font/your_bold_font.ttf");    if (style == Typeface.BOLD) {        super.setTypeface(boldTypeface/*, -1*/);    } else {        super.setTypeface(normalTypeface/*, -1*/);    }}


You can use my CustomTextView which allows you to specify a font file name in your assets folder:

https://github.com/mafshin/CustomTextView

and the usage is really simple:

<com.my.app.CustomTextView        xmlns:custom="http://schemas.android.com/apk/res/com.my.app"                    android:layout_width="wrap_content"        android:layout_height="wrap_content"        android:text="Test text"        android:id="@+id/testcustomview"         custom:fontAssetName="Politica XT.otf"        />


I think it's better to create your own package for custom fonts and import them in your project so that you can use them later in future

  package com.codeslips.utilities;    import android.content.Context;   import android.graphics.Typeface;  import android.util.AttributeSet;  import android.widget.TextView;    public class CustomTextView extends TextView {            public CustomTextView(Context context)               { super(context); setFont(); }            public CustomTextView(Context context,AttributeSet set)             { super(context,set); setFont(); }           public CustomTextView(Context context,AttributeSet set,int defaultStyle)              { super(context,set,defaultStyle); setFont(); }           private void setFont() {            Typeface typeface=Typeface.createFromAsset(getContext().getAssets(),"fonts/your-font.ttf");            setTypeface(typeface); //function used to set font             }            }

Now use the above class in your XML file to have your custom font

    <com.codeslips.utilities.CustomTextView          android:layout_width="wrap_content"        android:layout_height="match_parent"       android:text="Upload Image"        android:paddingTop="10sp"       android:textSize="14sp"       android:layout_weight="0.7"       android:textColor="@android:color/white"/>