ttf studio personalizadas para letra fuentes font family estilos dafont android android-layout android-intent android-emulator android-listview

studio - fuentes para android apk



Fugas de memoria con una fuente personalizada para establecer una fuente personalizada (2)

Debería almacenar en caché el TypeFace, de lo contrario correría el riesgo de pérdidas de memoria en los teléfonos más antiguos . El almacenamiento en caché también aumentará la velocidad, ya que no es súper rápido leer activos todo el tiempo.

public class FontCache { private static Hashtable<String, Typeface> fontCache = new Hashtable<String, Typeface>(); public static Typeface get(String name, Context context) { Typeface tf = fontCache.get(name); if(tf == null) { try { tf = Typeface.createFromAsset(context.getAssets(), name); } catch (Exception e) { return null; } fontCache.put(name, tf); } return tf; } }

Di un ejemplo completo sobre cómo cargar fuentes personalizadas y estilo textviews como una respuesta a una pregunta similar . Parece que está haciendo la mayor parte correctamente, pero debe almacenar en caché la fuente como se recomienda arriba.

El siguiente código para configurar fuentes personalizadas ralentiza toda mi aplicación. ¿Cómo lo modifico para evitar pérdidas de memoria y aumentar la velocidad y administrar bien la memoria?

public class FontTextView extends TextView { private static final String TAG = "FontTextView"; public FontTextView(Context context) { super(context); } public FontTextView(Context context, AttributeSet attrs) { super(context, attrs); setCustomFont(context, attrs); } public FontTextView(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.FontTextView); String customFont = a.getString(R.styleable.FontTextView_customFont); setCustomFont(ctx, customFont); a.recycle(); } public boolean setCustomFont(Context ctx, String asset) { Typeface tf = null; try { tf = Typeface.createFromAsset(ctx.getAssets(),"fonts/"+ asset); } catch (Exception e) { Log.e(TAG, "Could not get typeface: "+e.getMessage()); return false; } setTypeface(tf); return true; } }


Siento que no se necesita utilizar el Caché de fuentes. ¿Podemos hacerlo de esta manera?

Un cambio menor en el código anterior. Corrígeme si estoy equivocado.

public class FontTextView extends TextView { private static final String TAG = "FontTextView"; private static Typeface mTypeface; public FontTextView(Context context) { super(context); } public FontTextView(Context context, AttributeSet attrs) { super(context, attrs); } public FontTextView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); if (mTypeface == null) { mTypeface = Typeface.createFromAsset(context.getAssets(), GlobalConstants.SECONDARY_TTF); } setTypeface(mTypeface); } }