Как использовать пользовательский шрифт в проекте, написанном в Android Studio


194

Я пытался использовать собственный шрифт в Android Studio, как мы это делали в Eclipse. Но, к сожалению, не мог понять, куда поместить папку «активы»!


Вот официальное руководство, которое вы можете проверить. developer.android.com/guide/topics/ui/look-and-feel/…
subrata sharma

Ответы:


344

Обновление 2020:

Создайте папку с именем font внутри папки 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 () в порядке. Если вы хотите изменить шрифт, когда пользователь использует приложение, вы можете поместить его в нужное место. Это работает также для кнопок
Rockhammer

1
Как я могу установить, что шрифт по умолчанию для всего проекта будет тем, который я добавляю? Это то, что делает первый пример кода?
Йонатан Нир

98

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

  1. Выберите «Файл»> «Создать»> «Папка»> «Папка активов».

  2. Нажмите готово

  3. Щелкните правой кнопкой мыши по активам и создайте папку с именем шрифты

  4. Поместите ваш файл шрифта в assets > fonts

  5. Используйте код ниже, чтобы изменить шрифт вашего textView

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

12
как использовать это в XML?
Suisse

4
Из этого туториала Вы узнаете,
Динеш

@Suisse служба поддержки Библиотека 26 обеспечивает полную поддержку этой функции на устройствах , работающих под управлением версии API 14 и выше ссылку
Ehsan.R

66

Есть много способов установить пользовательское семейство шрифтов на поле, и я использую это ниже.

Чтобы добавить шрифты в качестве ресурсов, выполните следующие действия в Android Studio:

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) В семействе шрифтов выберите опцию Больше шрифтов .., если вашего шрифта там нет. затем вы увидите, что откроется новое окно, в котором вы можете ввести нужный шрифт и выбрать нужный шрифт из этого списка, например) Обычный, Полужирный, Курсив и т. д., как показано на рисунке ниже. введите описание изображения здесь

Шаг 3) Затем вы увидите, что папка со шрифтами будет автоматически сгенерирована в папке / res с выбранным вами xml-файлом шрифтов.

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

Тогда вы можете напрямую использовать это семейство шрифтов в XML как

      android:fontFamily="@font/josefin_sans_bold"

или программно вы можете достичь этого с помощью

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

Это не ответ на вопрос. Не каждый шрифт доступен в Google Fonts.
Мэтт Флетчер

2
Хороший ответ! Если вы не можете найти свой шрифт в списке - загрузите его в папку активов или определите его через xml
Эдгар Химич

21

Здравствуйте, у нас есть лучший способ применить шрифты к EditTexts и TextViews на Android и применить его во всем проекте.

Прежде всего вам нужно сделать папку со шрифтами. Вот шаги.

1: Перейдите в (папку проекта), затем app> src> main

2. Создайте папки с именем «assets / fonts» в основной папке.

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

Обратитесь по этой ссылке, вы можете найти некоторые советы, как решить эту ошибку.
Мухаммед Наим Дахи


В текущей сборке, я думаю, вам нужно изменить это на «extends AppCompatEditText».
Дизель

15

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

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

Документы по методу .

Более подробную информацию можно найти здесь.


9

Я хочу добавить свой ответ для Android-O и Android Studio 2.4

  1. Создайте папку с именем font в папке 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
Обратите внимание: если вы хотите рекламировать свой собственный продукт / блог, вы должны сообщить о своей принадлежности , в противном случае ваш ответ может быть помечен как спам. Пожалуйста, прочитайте Как не быть
спамером

Да @PetterFriberg
Суреш Майдараги

8

Согласно новой функции, доступной в Android O, ресурсы шрифтов в XML доступны как новая функция.

Чтобы добавить шрифты в качестве ресурсов, выполните следующие действия в Android Studio:

1) Щелкните правой кнопкой мыши папку res и выберите « Создать»> «Каталог ресурсов Android» . Откроется окно «Новый каталог ресурсов».

2) В списке Тип ресурса выберите шрифт и нажмите кнопку ОК.

Примечание. Имя каталога ресурсов должно быть шрифтом.

3) Добавьте файлы шрифтов в папку шрифтов.

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

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


2
должен быть ResourcesCompat.getFont (context, R.font.your_font)
Trung Le

7

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

Просто:

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

Есть много типов шрифтов, предоставляемых этой библиотекой.


6

Сначала добавьте файл 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 -> app (или название вашего приложения) -> 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");

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 / font 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/...
Parziphal

1
Кроме того, только потому, что пользовательские / загружаемые шрифты были введены в Android O (8.0), не означает, что для них нет обратной совместимости. Пожалуйста, ознакомьтесь с официальной документацией о том, как реализовать пользовательские шрифты. Обратите внимание, что вам может потребоваться также установить Android Studio 3.0.
Антонимонори

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

Добавьте ваши шрифты в папку assets в app / src / main / assets и создайте собственное текстовое представление, например:

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")
}

}

И вы сделали!

PS С android O можно напрямую добавлять шрифты.


1

поместите шрифты в папку ресурсов, затем примените fontfamily: '' ваши шрифты


-1

Для новых читателей

Вы можете использовать эту библиотеку Gloxey Custom Font Views

Gradle зависимость

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

Как пользоваться?

Создайте ресурсы папки -> шрифты . Скопируйте ваши шрифты в папку шрифтов .

Используйте свойство app: 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.