Android Galxy Tab Исключение во время выполнения: нельзя сделать родную гарнитуру? - PullRequest
2 голосов
/ 15 апреля 2011

Я пытаюсь использовать пользовательские шрифты. Он работает на эмуляторе без исц.:

               public static Typeface typeface;
             // -----define typeface

    typeface = Typeface.createFromAsset(getAssets(), "fonts/Verdana.TTf");
    Typeface.class.getField("DEFAULT").setAccessible(true);
                          ---------------------
        lblBrandCategory1.setTypeface(GuestActivity.typeface, 4);


            anyone knows the solution???

Ответы [ 2 ]

2 голосов
/ 30 октября 2011

У меня было (как это происходит на вкладке Галактика) делать в точности то, что вы делаете. Оказалось, что проблема чувствительна к регистру для меня, например, имя файла было все в нижнем регистре, и я прописал имя файла .ttf в коде Java.

Так, вероятно, это означает, что вы получаете эту ошибку всякий раз, когда ttf не может быть найден (так что проверьте, что ваш путь также хорош).

0 голосов
/ 20 мая 2014

У меня была та же проблема, я не думаю, что это зависит от устройства.

Я решил ее, убедившись в следующем:

  1. Если у вас есть большечем один проект, убедитесь, что ваш файл шрифта хранится в папке активов вашего основного проекта - это не проект зависимости.

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

    FontUtils.setDefaultFont(this, "DEFAULT", "fonts/arimo-regular.ttf");

Вот класс для переопределения шрифта по умолчанию для всего моего приложения.

public class FontUtils {

/**
 * Sets the default font.
 *
 * @param context the context
 * @param staticTypefaceFieldName the static typeface field name
 * @param fontAssetName the font asset name
 */
public static void setDefaultFont(Context context,
        String staticTypefaceFieldName, String fontAssetName) {
    final Typeface regular = Typefaces.get(context, fontAssetName);
    replaceFont(staticTypefaceFieldName, regular);
}

/**
 * Replace a font.
 *
 * @param staticTypefaceFieldName the static typeface field name
 * @param newTypeface the new typeface
 */
protected static void replaceFont(String staticTypefaceFieldName,
        final Typeface newTypeface) {
    try {
        final Field StaticField = Typeface.class
                .getDeclaredField(staticTypefaceFieldName);
        StaticField.setAccessible(true);
        StaticField.set(null, newTypeface);
    } catch (NoSuchFieldException e) {
        e.printStackTrace();
    } catch (IllegalAccessException e) {
        e.printStackTrace();
    }
}

static class Typefaces {

    private static final Hashtable<String, Typeface> cache = new Hashtable<String, Typeface>();

    public static Typeface get(Context c, String assetPath) {
        synchronized (cache) {
            if (!cache.containsKey(assetPath)) {
                try {
                    Typeface t = Typeface.createFromAsset(c.getAssets(),
                            assetPath);
                    cache.put(assetPath, t);
                } catch (Exception e) {
                    System.out.println("Could not get typeface '" + assetPath + "' because " + e.getMessage());
                    return null;
                }
            }
            return cache.get(assetPath);
        }
    }
}
}
...