Как использовать шрифт Roboto в проекте Android

Я разработал один проект для Android. В этом проекте шрифт текста по умолчанию используется для android: sans.

Теперь я хочу заменить шрифт текста по умолчанию на шрифт roboto для всего моего проекта.

Как я могу это сделать?

Ответ 1

Вы можете скачать шрифт 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" />

Ответ 2

  • Скачайте и распакуйте 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);

Ответ 3

txtView = (TextView) findViewById(R.id.txtView);

Typeface myTypeface = Typeface.createFromAsset(
                          this.getAssets(),
                          "font/Robot.otf");

txtView.setTypeface(myTypeface);

Ответ 4

Вы можете сделать это легко, используя 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.

Ответ 5

Еще одно замечание об использовании функции Typeface.createFromAsset(). Когда у меня было много звонков, это значительно повлияло на время раздувания. Чтобы преодолеть эту проблему, мы создали одиночный экземпляр Typeface, подобный этому

public static Typeface getTypeFace() {
        if (fromAsset == null) {
            fromAsset = Typeface.createFromAsset(getContext().getAssets(), "fonts/Roboto-Medium.ttf");
        }
        return fromAsset;
    }