Android - Использование собственного шрифта - PullRequest
259 голосов
/ 06 сентября 2010

Я применил пользовательский шрифт к TextView, но, похоже, он не меняет шрифт.

Вот мой код:

    Typeface myTypeface = Typeface.createFromAsset(getAssets(), "fonts/myFont.ttf");
    TextView myTextView = (TextView)findViewById(R.id.myTextView);
    myTextView.setTypeface(myTypeface);

Может кто-нибудь, пожалуйста, дайте мнеиз этого вопроса?

Ответы [ 21 ]

2 голосов
/ 07 декабря 2017

С Android 8.0 с использованием пользовательских шрифтов в приложении стало проще с downloadable fonts. Мы можем добавлять шрифты непосредственно в res/font/ folder в папке проекта, и при этом шрифты автоматически становятся доступными в Android Studio.

Folder Under res with name font and type set to Font

Теперь установите атрибут fontFamily для списка шрифтов или нажмите больше и выберите шрифт по вашему выбору. Это добавит tools:fontFamily="@font/your_font_file" строку к вашему TextView.

Это автоматически создаст несколько файлов.

1. В папке значений будет создано fonts_certs.xml.

2. В Манифесте он добавит следующие строки:

  <meta-data
            android:name="preloaded_fonts"
            android:resource="@array/preloaded_fonts" /> 

3. preloaded_fonts.xml

<resources>
    <array name="preloaded_fonts" translatable="false">
        <item>@font/open_sans_regular</item>
        <item>@font/open_sans_semibold</item>
    </array>
</resources>
2 голосов
/ 16 мая 2013

Обязательно вставьте приведенный выше код в onCreate () после вашего вызова в super и вызова setContentView (). Эта маленькая деталь некоторое время держала меня в покое.

1 голос
/ 01 ноября 2017

Ну, через семь лет вы можете легко изменить все приложение textView или то, что хотите, используя android.support библиотеки 26 ++.

Например:

Создание пакета шрифтов app / src / res / font и переместите в него свой шрифт.

enter image description here

А в теме своего приложения просто добавьте его какfontFamily:

    <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
   . . . ...
    <item name="android:fontFamily">@font/demo</item>
</style>

Пример использования только с textView:

<style name="fontTextView" parent="@android:style/Widget.TextView">
    <item name="android:fontFamily">monospace</item>
</style>

И добавьте в свою основную тему:

<item name="android:textViewStyle">@style/fontTextView</item>

В настоящее время она работает 8,1 до 4,1 API Jelly Bean И это широкий диапазон.

1 голос
/ 30 мая 2013

Если вы хотите загрузить шрифт из сети или легко стилизовать его, вы можете использовать:

https://github.com/shellum/fontView

Пример:

<!--Layout-->
<com.finalhack.fontview.FontView
        android:id="@+id/someFontIcon"
        android:layout_width="80dp"
        android:layout_height="80dp" />

//Java:
fontView.setupFont("http://blah.com/myfont.ttf", true, character, FontView.ImageType.CIRCLE);
fontView.addForegroundColor(Color.RED);
fontView.addBackgroundColor(Color.WHITE);
1 голос
/ 18 мая 2013

У меня была такая же проблема, TTF не появился.Я изменил файл шрифта, и с тем же кодом он работает.

1 голос
/ 04 ноября 2017

Обновление ответа: В Android 8.0 (уровень API 26) появилась новая функция «Шрифты в XML». просто используйте функцию «Шрифты в XML» на устройствах под управлением Android 4.1 (уровень API 16) и выше, используйте библиотеку поддержки 26.

см. ссылку


Старый ответ

Существует два способа настройки шрифтов:

!!! мой собственный шрифт в активы / шрифты / iran_sans.ttf



Путь 1: Refrection Typeface.class ||| лучший способ

вызов FontsOverride.setDefaultFont () в классе расширяет приложение. Этот код вызывает изменение всех программных шрифтов, даже шрифтов Toasts

AppController.java

public class AppController extends Application {

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

        //Initial Font
        FontsOverride.setDefaultFont(getApplicationContext(), "MONOSPACE", "fonts/iran_sans.ttf");

    }
}

FontsOverride.java

public class FontsOverride {

    public static void setDefaultFont(Context context, String staticTypefaceFieldName, String fontAssetName) {
        final Typeface regular = Typeface.createFromAsset(context.getAssets(), fontAssetName);
        replaceFont(staticTypefaceFieldName, regular);
    }

    private static void replaceFont(String staticTypefaceFieldName, final Typeface newTypeface) {
        try {
            final Field staticField = Typeface.class.getDeclaredField(staticTypefaceFieldName);
            staticField.setAccessible(true);
            staticField.set(null, newTypeface);
        } catch (NoSuchFieldException e) {
            e.printStackTrace();
        } catch (IllegalAccessException e) {
            e.printStackTrace();
        }
    }
}



Способ 2: использовать setTypeface

для специального просмотра просто вызовите setTypeface (), чтобы изменить шрифт.

CTextView.java

public class CTextView extends TextView {

    public CTextView(Context context) {
        super(context);
        init(context,null);
    }

    public CTextView(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
        init(context,attrs);
    }

    public CTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
        init(context,attrs);
    }

    @RequiresApi(api = Build.VERSION_CODES.LOLLIPOP)
    public CTextView(Context context, @Nullable AttributeSet attrs, int defStyleAttr, int defStyleRes) {
        super(context, attrs, defStyleAttr, defStyleRes);
        init(context,attrs);
    }

    public void init(Context context, @Nullable AttributeSet attrs) {

        if (isInEditMode())
            return;

        // use setTypeface for change font this view
        setTypeface(FontUtils.getTypeface("fonts/iran_sans.ttf"));

    }
}

FontUtils.java

public class FontUtils {

    private static Hashtable<String, Typeface> fontCache = new Hashtable<>();

    public static Typeface getTypeface(String fontName) {
        Typeface tf = fontCache.get(fontName);
        if (tf == null) {
            try {
                tf = Typeface.createFromAsset(AppController.getInstance().getApplicationContext().getAssets(), fontName);
            } catch (Exception e) {
                e.printStackTrace();
                return null;
            }
            fontCache.put(fontName, tf);
        }
        return tf;
    }

}
1 голос
/ 25 июня 2015

Вы можете использовать easy & simple EasyFonts стороннюю библиотеку для установки разнообразных пользовательских шрифтов на TextView.Используя эту библиотеку, вам не нужно беспокоиться о загрузке и добавлении шрифтов в папку assets / fonts.Также о создании объекта гарнитуры.

Вместо

Typeface myTypeface = Typeface.createFromAsset(getAssets(), "fonts/myFont.ttf");
TextView myTextView = (TextView)findViewById(R.id.myTextView);
myTextView.setTypeface(myTypeface);

Просто:

TextView myTextView = (TextView)findViewById(R.id.myTextView);
myTextView.setTypeface(EasyFonts.robotoThin(this));

Эта библиотека также предоставляет следующий шрифт face.

  • Roboto
  • Droid Serif
  • Droid Robot
  • Freedom
  • Fun Raiser
  • Android Nation
  • Зеленый авокадо
  • Распознавание
0 голосов
/ 29 января 2018
  • Откройте ваш проект и выберите Проект в левом верхнем углу
  • app -> src -> main
  • щелкните правой кнопкой мыши на главном и создайте имя каталога как assets
  • щелкните правой кнопкой мыши, чтобы собрать и создать новое имя каталога, это шрифты
  • вам нужно найти бесплатные шрифты, такие как бесплатные шрифты
  • , дайте его в Textview и вызовите его в классе Activity
  • скопируйте ваши шрифты внутрипапка шрифты
  • TextView txt = (TextView) findViewById(R.id.txt_act_spalsh_welcome); Typeface font = Typeface.createFromAsset(getAssets(), "fonts/Aramis Italic.ttf"); txt.setTypeface(font);

имя шрифта должно быть правильным и весёлым

0 голосов
/ 13 декабря 2017

Да, загружаемые шрифты так просты, как сказал Дипали .

Вот как вы это делаете ...

  1. Поместите TextView.
  2. На панели свойств выберите раскрывающийся список fontFamily.Если его там нет, найдите каретку (> и нажмите на нее, чтобы развернуть textAppearance) под.
  3. Разверните раскрывающийся список font-family.
  4. В маленькомсписок, прокрутите вниз до тех пор, пока не увидите more fonts
  5. . Откроется диалоговое окно, в котором вы можете выполнить поиск по Google Fonts
  6. Поиск шрифта, который вам нравится, с помощью панели поиска.вверху
  7. Выберите ваш шрифт.
  8. Выберите стиль шрифта, который вам нравится (например, жирный, обычный, курсив и т. д.)
  9. На правой панели выберитепереключатель с надписью Add font to project
  10. Нажмите кнопку ОК.Теперь у вашего TextView есть шрифт, который вам нравится!

БОНУС: Если вы хотите использовать ВСЕ в тексте в приложении с выбранным шрифтом, просто добавьте <item name="android:fontfamily">@font/fontnamehere</item> в styles.xml

0 голосов
/ 05 января 2018

Самое простое решение для Android теперь поддерживается!

Использовать пользовательский шрифт в формате xml:

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:fontFamily="@font/[your font resource]"/>

смотреть детали:

https://developer.android.com/guide/topics/ui/look-and-feel/fonts-in-xml.html

...