Я разработал один проект для Android. В этом проекте шрифт текста по умолчанию используется для android: sans.
Теперь я хочу заменить шрифт текста по умолчанию на шрифт roboto для всего моего проекта.
Как я могу это сделать?
Я разработал один проект для Android. В этом проекте шрифт текста по умолчанию используется для android: sans.
Теперь я хочу заменить шрифт текста по умолчанию на шрифт roboto для всего моего проекта.
Как я могу это сделать?
Вы можете скачать шрифт 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
.
Существует простой способ сделать это. Следуйте шагам из этого ответа на SO: fooobar.com/questions/14339/... (полный реквизит leocadiotine для решения. Я использовал его раньше, и он работает как шарм)
EDIT: подумайте 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" />
Скачайте и распакуйте zip файл 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.
Эта библиотека обертывает сложность добавления ресурса шрифта в ваш проекта и утилизировать недавно созданные шрифты inorder для максимизации ваше приложение.
Добавьте это в свой 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 завершается после класса Шрифт, нажимая Ctrl + space.
Еще одно замечание об использовании функции Typeface.createFromAsset()
. Когда у меня было много звонков, это значительно повлияло на время раздувания. Чтобы преодолеть эту проблему, мы создали одиночный экземпляр Typeface
, подобный этому
public static Typeface getTypeFace() {
if (fromAsset == null) {
fromAsset = Typeface.createFromAsset(getContext().getAssets(), "fonts/Roboto-Medium.ttf");
}
return fromAsset;
}