¿Cómo hacer un TextView personalizado?

Estoy tratando de crear una vista de texto personalizada que tenga la fuente establecida desde una ruta determinada. Por favor, dame un ejemplo y cómo puedo hacer eso con menos código:

 

 import android.content.Context; import android.graphics.Canvas; import android.graphics.Typeface; import android.util.AttributeSet; import android.widget.TextView; public class FontTextView extends TextView {  public FontTextView(Context context) {   super(context);   Typeface face=Typeface.createFromAsset(context.getAssets(), "Helvetica_Neue.ttf");   this.setTypeface(face);  }  public FontTextView(Context context, AttributeSet attrs) {    super(context, attrs);  Typeface face=Typeface.createFromAsset(context.getAssets(), "Helvetica_Neue.ttf"); this.setTypeface(face);  }  public FontTextView(Context context, AttributeSet attrs, int defStyle) {    super(context, attrs, defStyle);  Typeface face=Typeface.createFromAsset(context.getAssets(), "Helvetica_Neue.ttf"); this.setTypeface(face);  }  protected void onDraw (Canvas canvas) {    super.onDraw(canvas);       } } 

y en xml:

  

Crear una vista personalizada para Textview . Paso 1: attrs.xml la entrada en el archivo attrs.xml y brinde una opción para seleccionar Fuente como lista en TextView personalizado.

    

Paso 2: crea la entrada enum con la lista de fonts y asigna valores únicos

         

Paso 3: hacer entradas de todas las fonts en strings.xml

 Roboto-Bold Roboto-Medium Roboto-Light Roboto-Regular Roboto-Thin Roboto-Italic 

Paso 4: crea una carpeta de activos y copia toda la fuente necesaria que quieras poner en la carpeta de fonts

Paso 5: TextView una clase que extienda TextView

  import android.content.Context; import android.content.res.TypedArray; import android.graphics.Typeface; import android.util.AttributeSet; import android.widget.TextView; /** * Created by ANKIT */ public class CustomFontTextView extends TextView { String customFont; public CustomFontTextView(Context context, AttributeSet attrs) { super(context, attrs); style(context, attrs); } public CustomFontTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); style(context, attrs); } private void style(Context context, AttributeSet attrs) { TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.CustomFontTextView); int cf = a.getInteger(R.styleable.CustomFontTextView_fontName, 0); int fontName = 0; switch (cf) { case 1: fontName = R.string.Roboto_Bold; break; case 2: fontName = R.string.Roboto_Italic; break; case 3: fontName = R.string.Roboto_Light; break; case 4: fontName = R.string.Roboto_Medium; break; case 5: fontName = R.string.Roboto_Regular; break; case 6: fontName = R.string.Roboto_Thin; break; default: fontName = R.string.Roboto_Regular; break; } customFont = getResources().getString(fontName); Typeface tf = Typeface.createFromAsset(context.getAssets(), "font/" + customFont + ".ttf"); setTypeface(tf); a.recycle(); } } 

Puede usar esta clase personalizada de esta manera. .. usa tu packageName.ClassName

   

La clase personalizada a continuación puede ayudarlo a personalizar la configuración de la fuente requerida en TextView por lo que debe colocar algún archivo .ttf en los recursos y darle esta ruta en TextView personalizado.

 public class TextViewBoldFont extends TextView { public TextViewBoldFont(Context context, AttributeSet attrs) { super(context, attrs); String fontPath = "GOTHICB.TTF"; Typeface fontsStyle = Typeface.createFromAsset(context.getAssets(), fontPath); this.setTypeface(fontsStyle,Typeface.BOLD); } public TextViewBoldFont(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); String fontPath = "GOTHICB.TTF"; Typeface fontsStyle = Typeface.createFromAsset(context.getAssets(), fontPath); this.setTypeface(fontsStyle,Typeface.BOLD); } public TextViewBoldFont(Context context) { super(context); String fontPath = "GOTHICB.TTF"; Typeface fontsStyle = Typeface.createFromAsset(context.getAssets(), fontPath); this.setTypeface(fontsStyle,Typeface.BOLD); } }