Як використовувати нестандартний шрифт у проекті, написаному в Android Studio


194

Я намагався використовувати спеціальний шрифт в Android Studio, як ми це робили в Eclipse. Але, на жаль, не вдалося розібратися, куди помістити папку "активи"!


ось офіційний посібник, який ви можете перевірити. developer.android.com/guide/topics/ui/look-and-feel/…
subrata sharma

Відповіді:


343

Оновлення 2020:

Створіть папку з назвою шрифту всередині папки res та скопіюйте свій шрифт

введіть тут опис зображення

<TextView
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:fontFamily="@font/abc_font" />

Для програмного використання:

textView.setTypeface(ResourcesCompat.getFont(context, R.font.abc_font))

10
Усі, хто завантажує власні шрифти з активів, мають зауважити, що в Android 5.0 є помилка, де деякі шрифти не завантажуються. Хоча ця проблема була виправлена ​​в Android 5.1, рішення щодо підтримки 5.0 - це переписання шрифтів ttf. Дивіться це питання для отримання додаткової інформації stackoverflow.com/questions/27269264 / ...
BrentM

Другий варіант працював для мене ідеально. Дякую за це!
Емзор

2
Я використав this.getContext (). getApplicationContext (). getAssets (), щоб знайти каталог (android studio 2.1)
kuzdu

1
@kuthue onCreate () чудово. Якщо ви хочете змінити шрифт, поки користувач використовує додаток, ви можете помістити його в точку, яку ви хочете, щоб він змінився. Це працює також для кнопок
рок-молот

1
Як я можу встановити, що шрифт за замовчуванням для всього проекту буде таким спеціальним, який я додаю? Це те, що робиться перший приклад коду?
Йонатан Нір

97

https://i.stack.imgur.com/i6XNU.png

  1. Виберіть Файл> Створити> Папка> Активація папки

  2. Клацніть закінчити

  3. Клацніть правою кнопкою миші на активах та створіть папку під назвою шрифти

  4. Помістіть файл шрифту в активи > шрифти

  5. Використовуйте код нижче, щоб змінити шрифт textView

    TextView textView = (TextView) findViewById(R.id.textView);
    Typeface typeface = Typeface.createFromAsset(getAssets(), "fonts/yourfont.ttf");
    textView.setTypeface(typeface);

12
як це використовувати в XML?
Suisse

4
У цьому підручнику описано, як його використовувати в XML: stacktips.com/tutorials/android/…
Дінеш,

@Suisse Бібліотека підтримки 26 надає повну підтримку цієї функції на пристроях, на яких працює версія API 14 і вище посилання
Ehsan.R

66

Існує багато способів встановити власну сімейство шрифтів у полі, і я використовую ось такий нижче.

Щоб додати шрифти як ресурси, виконайте такі дії в студії Android:

1) Клацніть правою кнопкою миші папку res та перейдіть до Нового> Каталог ресурсів Android. З'явиться вікно Новий каталог ресурсів.

2) У списку типів ресурсів виберіть шрифт та натисніть кнопку ОК.

Примітка. Ім'я каталогу ресурсів має бути шрифтом.

3) Додайте файли шрифтів у папку шрифтів. введіть тут опис зображення

Додайте шрифт у потрібному вигляді у свій XML-файл:

введіть тут опис зображення

Примітка. Але для цього вам потрібні такі речі:

  1. Android Studio вище на 3,0 канарки.

  2. Ваша активність розширює AppCompatActivity.

  3. Оновіть файл Gradle таким чином:

    compileSdkVersion 26
    buildToolsVersion "26.0.1"
    defaultConfig {        
        minSdkVersion 19
        targetSdkVersion 26
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }

buildtoolsVersionвище до 26 і мінімально targetSdkVersionнеобхідних 26

  1. Додайте залежності у файл build.gradle:
classpath 'com.android.tools.build:gradle:3.0.0-beta4'
  1. gradle-wrapper.properties:
distributionUrl=https\://services.gradle.org/distributions/gradle-4.1-all.zip

42

Я думаю, що замість завантаження .ttf-файлу ми можемо використовувати шрифти Google. Це дуже просто втілити в життя. тільки ви повинні виконати ці кроки. крок 1) Відкрийте layout.xml свого проекту та вибране сімейство шрифтів перегляду тексту в атрибутах (для знімка еталонного екрана додається) введіть тут опис зображення

крок 2) У сімействі шрифтів виберіть Більше шрифтів .. опція, якщо вашого шрифту немає. тоді ви побачите нове вікно, яке відкриється, там ви можете ввести потрібний шрифт та вибрати потрібний шрифт із цього списку, тобто) Regular, Bold, Italic і т. д., як показано на зображенні нижче. введіть тут опис зображення

крок 3) Тоді ви будете спостерігати, як папка шрифту буде автоматично генерована в папці / res, що має вибраний файл шрифтів xml.

введіть тут опис зображення

Тоді ви можете безпосередньо використовувати це сімейство шрифтів у xml як

      android:fontFamily="@font/josefin_sans_bold"

або граматично ви можете досягти цього, використовуючи

  Typeface typeface = ResourcesCompat.getFont(this, R.font.app_font);
  fontText.setTypeface(typeface);

Це не відповідь на питання. Не кожен шрифт доступний у шрифтах Google.
Метт Флетчер

2
Гарна відповідь! Якщо ви не можете знайти свій шрифт у списку - завантажте його в папку "Активи" або визначте його через xml
Едгар Хіміч

21

Привіт, тут у нас є кращий спосіб застосувати шрифти на EditTexts та TextViews на android одразу та застосувати їх у всьому проекті.

Перш за все вам потрібно зробити папку шрифтів. Ось кроки.

1: Перейдіть до (папка проекту). Потім додаток> src> main

2: Створіть папки з назвою "активи / шрифти" в головній папці.

3: Помістіть ваші шрифти в папку шрифтів. Тут у мене є "MavenPro-Regular.ttf"

Ось кроки щодо застосування користувальницьких шрифтів у EditText і за допомогою цього підходу можна застосовувати шрифти на кожному введенні.

1: Створіть клас MyEditText (уподобане ім’я ...)

2: який розширює EditText

3: Застосуйте свій шрифт

Ось приклад коду;

public class MyEditText extends EditText {

    public MyEditText(Context context, AttributeSet attrs, int defStyle) {
        super(context, attrs, defStyle);
        init();
    }

    public MyEditText(Context context, AttributeSet attrs) {
        super(context, attrs);
        init();
    }

    public MyEditText(Context context) {
        super(context);
        init();
    }

    private void init() {
        if (!isInEditMode()) {
            Typeface tf = Typeface.createFromAsset(getContext().getAssets(), "fonts/MavenPro-Regular.ttf");
            setTypeface(tf);
        }
    }

}

І ось Ось код, як ним користуватися.

MyEditText editText = (MyEditText) findViewById(R.id.editText);

editText.setText("Hello");

Або у вашому XML-файлі

   <MyEditText
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:gravity="center"
    android:textColor="#fff"
    android:textSize="16dp"
    android:id="@+id/editText"
    />

Цей клас дав мені цю помилку під час виконання: Помилка накачування класу MyEditText
GMX

Посилаючись на це посилання, ви можете знайти підказки, як вирішити помилку.
Мохаммед Найм Дахі


З поточним складанням, я думаю, вам потрібно буде змінити це на "розширює AppCompatEditText".
Дизель

15

З бібліотекою підтримки 26.0 (та Android O) шрифти можна легко завантажувати з ресурсу за допомогою: введіть тут опис зображення

Typeface typeface = ResourcesCompat.getFont(Context context, int fontResourceId) 

Документи для методу .

Більше інформації можна знайти тут.


9

Я хочу додати свою відповідь для Android-O та Android Studio 2.4

  1. Створіть папку з назвою шрифту в папці res . Завантажте різні шрифти, які ви хочете додати до прикладу проекту, шрифти Google

  2. Всередині вашої сім'ї шрифтів користувача xml

    приклад:

    <TextView
        android:fontFamily="@font/indie_flower"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:padding="10dp"
        android:text="@string/sample_text" />

3.Якщо ви хочете, щоб це було програмно, використовуйте наступний код

Typeface typeface = getResources().getFont(R.font.indie_flower);
textView.setTypeface(typeface);

Для отримання додаткової інформації перейдіть за посиланням на мій пост у стилі шрифтів для Android з Android Studio 2.4


6
Зверніть увагу, якщо ви хочете просувати свій товар / блог, ви повинні розкрити свою приналежність , інакше ваша відповідь може бути позначена як спам. Прочитайте, як не бути спамером
DavidPostill

Так @PetterFriberg
Суреш Майдарагі

8

Відповідно до нової функції, доступної в Android O, ресурси шрифту в XML доступні як нова функція.

Щоб додати шрифти як ресурси, виконайте такі дії в студії Android:

1) Клацніть правою кнопкою миші папку res та перейдіть до Нового> Каталог ресурсів Android . З'явиться вікно Новий каталог ресурсів.

2) У списку типів ресурсів виберіть шрифт та натисніть кнопку ОК.

Примітка. Ім'я каталогу ресурсів має бути шрифтом.

3) Додайте файли шрифтів у папку шрифтів.

Ви можете отримати доступ до ресурсів шрифту за допомогою нового типу ресурсу, шрифту. Наприклад, для доступу до ресурсу шрифту використовуйте @ font / myfont або R.font.myfont.

напр. Typeface typeface = getResources().getFont(R.font.myfont); textView.setTypeface(typeface);


2
повинен бути ResourcesCompat.getFont (контекст, R.font.your_font)
Trung Le

7

Ви можете використовувати просту та просту бібліотеку сторонніх EasyFonts, щоб встановити різноманітні спеціальні шрифти для своїх TextView. Використовуючи цю бібліотеку, вам не доведеться турбуватися про завантаження та додавання шрифтів у папку активів / шрифтів. Також про створення об'єктів Typeface. Ви також не зможете створити папку активів.

Просто:

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

Існує багато типів шрифтів, наданих цією бібліотекою.


6

1-й додайте файл font.ttf у папку шрифту. Потім додайте цей рядок у методі onCreate

    Typeface typeface = ResourcesCompat.getFont(getApplicationContext(), R.font.myfont);
    mytextView.setTypeface(typeface);

І ось мій xml

            <TextView
            android:id="@+id/idtext1"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginTop="7dp"
            android:gravity="center"
            android:text="My Text"
            android:textColor="#000"
            android:textSize="10sp"
        />

4
  1. Створіть активи папок у програмі Project -> додаток (або ім'я програми) -> src -> main -> клацніть правою кнопкою миші -> New -> Directory.
  2. Потім створіть новий каталог всередині активів, який називається "шрифти".

Щоб призначити шрифт textView:

TextView textView = (TextView) findViewById(R.id.your_textView);

final Typeface font = Typeface.createFromAsset(context.getAssets(), "fonts/your_font_name");

ваше ім'я_фанта включає розширення шрифту.


3

Якщо ви дуже новачок в Android, як я, це може бути трохи хитро. Обов’язково телефонуйте:

TextView myTextView = (TextView) findViewById(R.id.textView);
Typeface typeface=Typeface.createFromAsset(getAssets(), "fonts/your font.ttf");
myTextView.setTypeface(typeface);

метод в рамках такого методу, як onCreate.


3

Android 8.0 (API 26) представив нові функції, що стосуються шрифтів.

1) Шрифти можна використовувати як ресурси.

2) Шрифти, що завантажуються.

Якщо ви хочете використовувати зовнішні шрифти у своєму додатку для Android, ви можете включити файли шрифтів в apk або налаштувати шрифти, що завантажуються.

Включення файлів шрифтів в APK : Ви можете завантажувати файли шрифтів, зберігати їх у res / file filer, визначати сімейство шрифтів та використовувати сімейство шрифтів у стилях.

Більш детальну інформацію про використання користувацьких шрифтів як ресурсів див. У http://www.zoftino.com/android-using-custom-fonts

Налаштування шрифтів, що завантажуються . Визначте шрифт, надавши дані про постачальника шрифтів, додайте сертифікат постачальника шрифтів та використовуйте шрифт у стилях.

Докладніше про шрифти, що завантажуються, див. Http://www.zoftino.com/downloading-fonts-android


2
Офіційна документація: developer.android.com/guide/topics/ui/look-and-feel/…
Парцифал

1
Крім того, тільки те, що спеціальні шрифти, що завантажуються на замовлення, були введені в Android O (8.0), не означає, що для нього немає зворотної сумісності. Перегляньте офіційну документацію про те, як реалізувати спеціальні шрифти. Зверніть увагу, що вам може знадобитися також встановлена ​​Android Studio 3.0.
anthonymonori

1

Спершу створіть assetsпапку, потім створіть fontsу ній папку.

Потім ви можете встановити fontз assetsабо directoryяк нижче:

public class FontSampler extends Activity {
    @Override
    public void onCreate(Bundle icicle) {
        super.onCreate(icicle);
        setContentView(R.layout.main);

        TextView tv = (TextView) findViewById(R.id.custom);
        Typeface face = Typeface.createFromAsset(getAssets(), "fonts/HandmadeTypewriter.ttf");

        tv.setTypeface(face);

        File font = new File(Environment.getExternalStorageDirectory(), "MgOpenCosmeticaBold.ttf");

        if (font.exists()) {
            tv = (TextView) findViewById(R.id.file);
            face = Typeface.createFromFile(font);

            tv.setTypeface(face);
        } else {
            findViewById(R.id.filerow).setVisibility(View.GONE);
        }
    }
} 

1

Зараз існує так багато способів застосувати шрифт. Один із найпростіших способів такий: 1) Клацніть правою кнопкою миші папку Res і перейдіть до Нового> Каталог ресурсів Android.

2) У списку типів ресурсу виберіть шрифт та натисніть кнопку ОК.

3) Помістіть файли шрифтів у папку шрифтів.


1

Додайте свої шрифти до папки активів у програмі / src / main / properties, зробіть спеціальний перегляд тексту так:

class CustomLightTextView : TextView {

constructor(context: Context) : super(context){
    attachFont(context)
}
constructor(context: Context, attrs: AttributeSet):    super(context, attrs){
    attachFont(context)
}
constructor(context: Context, attrs: AttributeSet?,    defStyleAttr: Int) : super(context, attrs, defStyleAttr) {
    attachFont(context)
}
fun attachFont(context: Context) {
    this.setTypeface(FontCache.getInstance().getLightFont(context))
}

}

Додати FontCache: Так що вам не доведеться створювати шрифт знову і знову, як:

class FontCache private constructor(){

val fontMap = HashMap<String,Typeface>()

companion object {
    private var mInstance : FontCache?=null
    fun getInstance():FontCache = mInstance?: synchronized(this){
        return mInstance?:FontCache().also { mInstance=it }
    }
}

fun getLightFont(context: Context):Typeface?{
    if(!fontMap.containsKey("light")){
        Typeface.createFromAsset(context.getAssets(),"Gotham-Book.otf");
        fontMap.put("light",Typeface.createFromAsset(context.getAssets(),"Gotham-Book.otf"))
    }
    return fontMap.get("light")
}

}

І ви зробили!

PSFrom android O ви можете безпосередньо додавати шрифти.


1

помістіть шрифти в папку ресурсів, а потім застосуйте fontfamily: '' ваші шрифти


-1

Для нових читачів

Ви можете користуватися цією бібліотекою Gloxey Спеціальні перегляди шрифтів

залежність градуса

  dependencies{
           compile 'io.gloxey.cfv:custom-font-views:1.0.2'
    }

Як використовувати?

Створення ресурсів папок -> шрифти . Скопіюйте свої шрифти в папку шрифтів .

Використовуйте додаток властивості : font_name = "font_name_string", щоб застосувати шрифт до подання.

Приклад

   <!--Font Names in srings.xml-->
       <string name="aadhunik">aadhunik.ttf</string>
       <string name="kung_fool">kungfool.ttf</string>
       <string name="skrova">skrova.otf</string>
       <string name="painting_in_the_sun_light">painting_in_the_sun_light.ttf</string>

   <!--Include views in layout.xml-->
       <io.gloxey.cfv.CFTextView
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:gravity="center"
       android:text="Aadhunik"
       android:textColor="#ff00"
       android:textSize="40sp"
       app:font_name="@string/aadhunik" />

       <io.gloxey.cfv.CFButton
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:text="Kung Fool"
       android:textColor="#154748"
       app:font_name="@string/kung_fool" />

       <io.gloxey.cfv.CFEditText
       android:layout_width="match_parent"
       android:layout_height="wrap_content"
       android:gravity="center"
       android:text="Hello world"
       android:textSize="30sp"
       app:font_name="@string/skrova" />

       <io.gloxey.cfv.CFCheckBox
       android:layout_width="wrap_content"
       android:layout_height="wrap_content"
       android:layout_gravity="center"
       android:text="Painting In The Sun Light"
       android:textSize="30sp"
       app:font_name="@string/painting_in_the_sun_light" />
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.