Android-гарнитура createFromAsset

У меня есть настраиваемый вид, который рисует текст на Canvas. Я хочу изменить font на шрифт, хранящийся в папке assets.

Я использую Android Studio, поэтому я создал папку src / main / assets и поместил туда свои файлы ttf.

Paint txt = new Paint()
Typeface font = Typeface.createFromAsset(getAssets(), "robotobold.ttf");
txt.setTypeface(font);

Проблема в том, что Android Studio не распознает getAssets () в моем пользовательском представлении, однако распознает его в моем действии. Я пробовал передать Typeface через свой Activity, но когда я это делаю, это не меняет font.


person Caleb Bramwell    schedule 26.08.2013    source источник
comment
Одно из предложений: если вы хотите применить собственный шрифт из ресурсов, лучше создайте собственный класс, который расширяет TextView, внутри которого вы можете установить шрифт и использовать его в макетах xml, чтобы во время выполнения вам не нужно было применять шрифт для всех TextViews .   -  person Manjunath    schedule 26.08.2013
comment
Обнаружено использование библиотеки, оно содержит несколько представлений, таких как textview, editext, button и многие другие stackoverflow.com/a/42001474/4446392   -  person Chathura Jayanath    schedule 03.02.2017


Ответы (6)


Вы можете использовать метод View getContext() для получения текущего Context, а затем использовать его для получения ресурсов:

Typeface font = Typeface.createFromAsset(getContext().getAssets(), "robotobold.ttf");
person Phil    schedule 26.08.2013

Прежде всего, вы должны сохранить папку assets внутри project, а не внутри src/main .. А затем создать папку с именем fonts внутри assets. затем поместите в него конкретный шрифт ttf files. Вы можете использовать этот шрифт в кодировании, например:

Typeface type = Typeface.createFromAsset(getAssets(),"fonts/filename.ttf");
textview.setTypeface(type);
person Kavin    schedule 26.08.2013
comment
спасибо, я пытался / fonts / ... и android.os просто не мог захватить шрифт. Удаление тире позволило системе Android распознавать файл шрифта. - person sivi; 17.02.2015
comment
Эй, что ты имеешь в виду под своим проектом? Приложение не может найти шрифты, у меня они тоже есть в / src / main / assets / font. - person Sercan Samet Savran; 21.02.2020

создал папку src / main / assets и поместил туда файлы шрифтов.

в действии

Typeface font = Typeface.createFromAsset(getAssets(),  "Mukta-Regular.ttf");
tv.setTypeface(font);

во фрагменте

Typeface.createFromAsset(getActivity().getAssets(), "Mukta-Regular.ttf");
tv.setTypeface(font);
person Sudhir singh    schedule 12.01.2018

Чтобы повторно использовать гарнитуры в своих проектах, я создаю класс, полный методов гарнитуры, таким образом, мне не нужно каждый раз создавать новую гарнитуру.

Я называю класс FontClass, и в этом классе есть метод для каждого шрифта, который мне нужно использовать, например:

public static Typeface getOpenSansRegular(Context c){
    return Typeface.createFromAsset(c.getAssets(), "OpenSans-Light.ttf");
}

Тогда я могу использовать их так:

TextView text = (TextView) findViewById(R.id.textview);
text.setTypeface(FontClass.getOpenSansRegular(getApplicationContext());
person MichaelStoddart    schedule 07.09.2016
comment
Как это предотвращает создание нового шрифта каждый раз? - person weston; 14.11.2016

Папку с ресурсами необходимо поместить в папку «Project», а не в папку «src». Вы поместили свой шрифт в "src / main / assets / robotobold.ttf", поэтому он не работает. Его нужно разместить так: "/assets/robotobold.ttf".

person arshu    schedule 26.08.2013
comment
Сначала я сделал это, но потом увидел следующее: stackoverflow.com/questions/16821182/ - person Caleb Bramwell; 26.08.2013
comment
Нет, поэтому я задал вопрос. - person Caleb Bramwell; 26.08.2013

Моя ошибка заключалась в добавлении строки

Typeface mFont = Typeface.createFromAsset(this.getAssets(), "abc.ttf");

перед onCreate ()

person makkuzu    schedule 22.09.2016