it-roy-ru.com

Проблема при использовании нестандартного шрифта - "Нельзя сделать нативный шрифт"

Я пытаюсь использовать шрифт, который я нашел в интернете, но проблема в том, что я получаю FC с "родной гарнитурой не получается".

Вот код в getView моего ListVIew:

        holder.tv_SuraName   =(TextView)convertView.findViewById(R.id.Start_Name);
        holder.tv_SuraName.setTypeface(Typeface.createFromAsset(mContext.getAssets(), "suralist_font.ttf"));

Может кто-нибудь сказать мне, почему я могу использовать пользовательский диск? Вы можете получить его ЗДЕСЬ .. файл .ttf

49
Omar

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

36
Nikolay Elenkov

Моя проблема заключалась в неправильном размещении папки ресурсов. 

При использовании Android Studio папка ресурсов должна быть внутри исходных наборов, например 

sRC/главная/активы /

Нашел в этот ответ

48
roelvogel

Есть в основном 4 вещи, которые могут вызвать это:

  1. Вы используете неправильное расширение
  2. Вы должны поместить шрифты в папку активов и не внутри активов/шрифты /
  3. Вы неправильно написали шрифты
  4. Шрифты должны быть в нижнем регистре (в моем случае решение было переименовать MyFont.ttf в myfont.ttf, странно)
28
erdomester

Дважды проверьте расширение не в заглавных буквах, т.е. suralist_font.TTF

Шрифты часто приходят, кажется, приходят таким образом, и это может быть упущено.

21
tlrmcknz

У меня была такая же проблема, я создал свой в assets> fonts> what.ttf и получал ту же ошибку. Я добавил расширение fonts (fonts/what.ttf), и оно решало проблему в каждом случае. 

 holder.tv_SuraName   =(TextView)convertView.findViewById(R.id.Start_Name);
 holder.tv_SuraName.setTypeface(Typeface.createFromAsset(mContext.getAssets(),    "fonts/suralist_font.ttf"));
9
a54studio

Скорее старый поток, но я хочу добавить еще одну причину, по которой это может произойти: вы должны установить представление содержимого перед вызовом гарнитуры. Смотрите пример ниже

Не работает:

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

        TextView title = (TextView)findViewById(R.id.tvTitle);
        Typeface font = Typeface.createFromAsset(this.getAssets(), "fonts/whatever.ttf");
        title.setTypeface(font);

        setContentView(R.layout.main);
    }

Работает!

@Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main); // <-- call before typeface

        TextView title = (TextView)findViewById(R.id.tvTitle);
        Typeface font = Typeface.createFromAsset(this.getAssets(), "fonts/whatever.ttf");
        title.setTypeface(font);
    }
2
Alina B.

Я использую Android studio, в моем случае проблема была связана с путем к папке ресурсов, в Eclipse путь к папке ресурсов - res/assets/, но в Android Studio - src/main/assets/.__ Итак, я просто переместил свой файл шрифтов по этому пути и, наконец, проблема решена.

2
Rahul Sharma

Либо ваш файл шрифта поврежден, либо вы делаете какую-то ошибку в написании, когда называете имя файла. У меня была та же проблема, потому что имя файла, указанное в папке ресурса, было 

roboto_black.ttf

и, декларируя в файле Java, я произнес это как:

roboto_blak.ttf

Если ваши файлы .ttf находятся в папке активов, используйте:

Typeface type_bold = Typeface.createFromAsset(getAssets(), "roboto_black.ttf");

Иначе, если он находится в папке шрифтов, используйте:

type_bold = Typeface.createFromAsset(getAssets(), "fonts/roboto_black.ttf");

Надеюсь, поможет!

1
Abhilasha Sharma

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

Согласно документации Android здесь

основные/активы / Это пусто. Вы можете использовать его для хранения необработанных файлов активов. Файлы, которые вы сохраняете здесь, компилируются в файл .apk как есть, и исходное имя файла сохраняется. Вы можете перемещаться по этому каталогу так же, как и в обычной файловой системе, используя URI, и читать файлы как поток байтов, используя AssetManager. Например, это хорошее место для текстур и игровых данных.

Поэтому структура вашей папки должна быть yourmodule/main/assets (например, *** pp/main/assets ***)

0
d4c0d312

Надеюсь, это поможет

Typeface.createFromAsset пропускает поток активов: http://code.google.com/p/Android/issues/detail?id=9904

0
Pawan Maheshwari

Как заявляет CommonsWare в этот ответ

Я предполагаю, что есть проблема с самим шрифтом. Эта ошибка будет запущен, когда собственный код в ОС попытается загрузить гарнитура.

В любом случае попробуйте это:

holder.tv_SuraName = (TextView)convertView.findViewById(R.id.Start_Name);
Typeface Font = Typeface.createFromAsset(this.getAssets(),"suralist_font.ttf");
holder.tv_SuraName.setTypeface(Font);
0
Mr.James

У меня была та же проблема, которая произошла на Android 4.0.3-4.0.4 (100% воспроизводимая на эмуляторе IceCreamSandwich mips 4.0.3). 

Проблема заключалась в том, что шрифты TTF, которые у меня были, были неправильными, несмотря на то, что почти все версии Android могли загружать эти шрифты TTF. Поэтому я использовал https://cloudconvert.com/woff-to-ttf (так как у меня были и файлы woff) для создания новых шрифтов TTF, что решило мою проблему.

0
negersiu

Я навсегда отлаживал эту ошибку в Android Studio. Очистка и перестройка проекта после добавления шрифтов в каталог ресурсов исправили проблему для меня.

0
RuudJ

Для меня сначала сработало изменение названия шрифта на строчные и подчеркивания: с Amatic-Sc.ttf на amatic_sc.ttf

Затем в методе set.TypeFace измените assets/fonts/amatic_sc.ttf на just fonts/amatic_sc.ttf .

0
David JavaNab

Просто сделал build --> clean и он начал рендеринг. 

0
Anukool

У меня была та же проблема с COMIC.TTF из комиксов без мс Windows . Поскольку исходный файл, который я поместил в папку assets/fonts, был в верхнем регистре, как написано выше, мне пришлось вводить его точно в верхнем регистре . Typeface.createFromAsset (getAssets (), "fonts/COMIC.TTF");

оказывается, проблема была вызвана строчными буквами: Typeface.createFromAsset (getAssets (), "fonts/comic.ttf");

0
Olumide Oyetoke