Как использовать шрифт Roboto в Android Project
Я разработал один проект Android. В этом проекте текстовый шрифт по умолчанию установлен на Android: Sans.
Теперь я хочу заменить шрифт текста по умолчанию на шрифт roboto для всего моего проекта.
Как я могу это сделать?
5 ответов
Вы можете скачать шрифт Roboto здесь: https://www.google.com/design/spec/resources/roboto-noto-fonts.html.
Вы можете сделать это традиционным способом, используя TypeFace
, как это:
Typeface typeface = Typeface.createFromAsset(getAssets(), fontName);
textView.setTypeface(typeface);
Примечание: вышеперечисленное должно быть сделано в каждом Activity
,
В качестве альтернативы, если, например, вы хотите применить шрифт Roboto ко всем TextView's
в вашем приложении, то вам нужно будет создать свой собственный виджет, который расширяет TextView
,
Есть простой способ сделать это. Следуйте leocadiotine в этом ответе на SO: /questions/29491372/android-hotite-ustanovit-polzovatelskie-shriftyi-dlya-vsego-prilozheniya-a-ne-vo-vremya-vyipolneniya/29491381#29491381 (полный реквизит leocadiotine для решения. Я использовал его раньше, и он работает как шарм)
РЕДАКТИРОВАТЬ: думать о your_namespace
в качестве маркера для вас, чтобы дать ему имя по вашему выбору. Например, при интеграции Admob в XML я использую xmlns:ads
, Вы можете использовать, например: xmlns:font
или что-то описательное.
Что касается того, что означает custom.ttf, это в основном файл шрифта с его расширением, который вам нужно скопировать в свой файл. Assets
папка. Например, если вы используете ROBOTO-REGULAR.TTF, замените файл custom.ttf на ROBOTO-REGULAR.TTF. Используя этот пример, весь код должен выглядеть так:
<your.package.widget.TypefacedTextView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:font="http://schemas.android.com/apk/res/your.package"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="Custom fonts in XML are easy"
android:textColor="#FFF"
android:textSize="14dip"
font:typeface="ROBOTO-REGULAR.TTF" />
Скачать и распаковать
Roboto
почтовый файл шрифтаСоздать
assets
папку в вашем проекте, если у вас ее еще нет. Я предполагаю, что вы используете Android Studio, вот как это сделать.Создайте новый каталог в папке активов, назовите его
font
,Откройте разархивированный файл и скопируйте выбранный вами стиль шрифта. Ваша папка шрифтов выглядит так:
Теперь вы можете использовать этот шрифт в любом месте вашего приложения, например:
Typeface roboto = Typeface.createFromAsset(context.getAssets(),
"font/Roboto-Bold.ttf"); //use this.getAssets if you are calling from an Activity
txtView.setTypeface(roboto);
txtView = (TextView) findViewById(R.id.txtView);
Typeface myTypeface = Typeface.createFromAsset(
this.getAssets(),
"font/Robot.otf");
txtView.setTypeface(myTypeface);
Вы можете сделать это легко, используя Typerlib.
Эта библиотека оборачивает сложность добавления ресурса шрифта в ваш проект и перезапускает недавно созданный порядок шрифтов, чтобы максимизировать производительность вашего приложения.
Добавьте это к вашему build.gradle
dependencies {
compile 'com.elmargomez.typer:typerlib:1.0.0'
}
Тогда вы можете использовать шрифт
TextView txtView1 = (TextView) findViewById(R.id.yourTxtView1);
TextView txtView2 = (TextView) findViewById(R.id.yourTxtView2);
TextView txtView3 = (TextView) findViewById(R.id.yourTxtView3);
TextView txtView4 = (TextView) findViewById(R.id.yourTxtView4);
txtView1.setTypeface(Typer.set(yourContext).getFont(Font.ROBOTO_REGULAR));
txtView2.setTypeface(Typer.set(yourContext).getFont(Font.ROBOTO_CONDENSED_ITALIC));
txtView3.setTypeface(Typer.set(yourContext).getFont(Font.ROBOTO_THIN));
txtView4.setTypeface(Typer.set(yourContext).getFont(Font.ROBOTO_BOLD));
Включает в себя все текущие шрифты в Roboto, например:
Font.ROBOTO_MEDIUM
Font.ROBOTO_REGULAR
etc.
Для просмотра всех доступных шрифтов используйте Android Studio Auto complete после класса Font, нажав Ctrl + пробел.
Еще одно замечание по использованию Typeface.createFromAsset()
функция. Когда у меня было много звонков, это значительно повлияло на время инфляции. Чтобы преодолеть эту проблему, мы создали единый экземпляр Typeface
как это
public static Typeface getTypeFace() {
if (fromAsset == null) {
fromAsset = Typeface.createFromAsset(getContext().getAssets(), "fonts/Roboto-Medium.ttf");
}
return fromAsset;
}