Fuentes personalizadas y vista de texto personalizada en Android

De una aplicación que necesito desarrollar, he recibido una fuente específica que tiene muchos archivos como FontName-Regular, FontName-Bold, FontName-it. Necesito usarlo en todas las vistas de texto en la aplicación. Primero pensé que era una tarea fácil. Mire SO y encontré un hilo muy bonito:aqu

Así que primero me gustó:

public static void overrideFonts(final Context context, final View v) {
    try {
        if (v instanceof ViewGroup) {
            ViewGroup vg = (ViewGroup) v;
            for (int i = 0; i < vg.getChildCount(); i++) {
                View child = vg.getChildAt(i);
                overrideFonts(context, child);
            }
        } else if (v instanceof TextView) {
            ((TextView)v).setTypeface(FONT_REGULAR);
        }
    } catch (Exception e) {
        e.printStackTrace();
        // ignore
    }
}

Y llamé a este método durante onCreate en mi actividad. Cada textView en mi aplicación mostraba esa fuente y ese chico, estaba feliz de alejarme tan fácilmente. Hasta que llegué a una pantalla donde algunas vistas de texto requeríanNegrit comoStyle (android:textStyle="bold"). Entonces me di cuenta de que esta solución no me brinda la posibilidad de cargar elNegrit .ttf de los activos.

Than miró más allá y vio una buena implementación personalizada de TextView, en la misma pregunta SO:

public class MyTextView extends TextView {

    public MyTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyTextView(Context context) {
        super(context);
        init();
    }

    public void init() {

        Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "font/chiller.ttf");
        setTypeface(tf ,1);

    }
    }

Esto se ve aún mejor. Mi pregunta es: ¿cómo puedo detectar eninit() si mi control tiene Style configurado en negrita o no, ¿puedo asignar el TypeFace solicitado?

Gracias por tu tiempo

LE. Siguiendo el ejemplo a continuación, actualicé mi clase como:

public class MyTextView extends TextView {

    Typeface normalTypeface = Typeface.createFromAsset(getContext().getAssets(), Constants.FONT_REGULAR);
    Typeface boldTypeface = Typeface.createFromAsset(getContext().getAssets(),  Constants.FONT_BOLD);

    public MyTextView(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
    }

    public MyTextView(Context context, AttributeSet attrs) {
        super(context, attrs);
    }

    public MyTextView(Context context) {
        super(context);
    }

    public void setTypeface(Typeface tf, int style) {
        if (style == Typeface.BOLD) {
            super.setTypeface(boldTypeface/*, -1*/);
        } else {
            super.setTypeface(normalTypeface/*, -1*/);
        }
    }
}

Bueno Si depuro, la aplicación entra en setTypeFace y parece aplicar la negrita, pero en mi diseño no puedo ver ningún cambio, no en negrita. No importa qué fuente use, no se realizan cambios en mi TextView y se muestra con la fuente de Android predeterminada. Me pregunto porque

He resumido todo en una publicación de blog aquí en mi blog tal vez ayude a alguien.

Respuestas a la pregunta(6)

Su respuesta a la pregunta