Как повысить производительность при использовании пользовательских шрифтов в Android EditText? - PullRequest
0 голосов
/ 02 декабря 2011

Я настраиваю TextView в Android с помощью шрифта .ttf, используя:

Typeface handType = Typeface.createFromAsset ( getContext().getAssets(), "fonts/JOURNAL.TTF");

Проблема в том, что когда он входит в режим редактирования, символы не появляются на экране сразу, каксо стандартным встроенным шрифтом, но для его рендеринга требуется некоторое время, короткое, но достаточное для того, чтобы он чувствовал себя вялым.

Есть ли какая-либо техника (кеш и т. д.), которая помогла бы мне сделать шрифты отображаемыми мгновенно?

Также заметил, что задержка варьируется от шрифта к шрифту и, кажется, ухудшается со сложностью шрифта

1 Ответ

1 голос
/ 15 ноября 2013

Вы можете попробовать использовать фабрику. Это действительно лучше, потому что мы не выделяем шрифты каждый раз.

import java.util.HashMap;

import android.content.Context;
import android.graphics.Typeface;
import android.util.Log;

public class FontFactory {
private static FontFactory instance;
private HashMap<String, Typeface> fontMap = new HashMap<String, Typeface>();
private Context context;

private FontFactory(Context context) {
    this.context = context.getApplicationContext();
}

public static FontFactory getInstance(Context context) {
    if(instance == null){
        return instance = new FontFactory(context);
    } else {
        return instance;
    }
}

public Typeface getFont(String font) {
    Typeface typeface = fontMap.get(font);
    if (typeface == null) {
        try {
            typeface = Typeface.createFromAsset(context.getResources().getAssets(), "fonts/" + font);
            fontMap.put(font, typeface);  
        } catch (Exception e) {
            Log.e("FontFactory", "Could not get typeface: " + e.getMessage() + " with name: " + font);
            return null;
        }

    }
    return typeface;
}

}

Суть: https://gist.github.com/odemolliens/4d5ff5630b6317397956

...