Пользовательские шрифты в Android

Я уже прочитал несколько статей и искал в Google, но я этого не сделал.

Моя проблема касается шрифта.

В Android в "android:typeface" есть только 4 атрибута: Normal, Sans, Serif, Monospace.

Итак, что мне нужно сделать, чтобы использовать "Вердану" в моем приложении?

Пожалуйста, предложите мне правильный способ использования этого шрифта в приложении для Android.

Ответ 1

Это простой пример... создайте папку в корне вашего проекта под названием assets/fonts/, затем вставьте файл шрифта TTF (в данном случае Verdana.ttf). Затем, если вы хотите применить этот шрифт, скажем a TextView, выполните следующие действия:

import android.graphics.Typeface;

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/Verdana.ttf");

    tv.setTypeface(face);
  }
}

Этот пример был взят из книги ComonsWare (написанной Марком Мерфи). Вы можете загрузить полный пример из GitHub.

Ответ 2

Вы можете использовать PixlUI в https://github.com/neopixl/PixlUI

импортируйте свой .jar и используйте его в XML

 <com.neopixl.pixlui.components.textview.TextView
    android:id="@+id/textView1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="@string/hello_world"
    pixlui:typeface="GearedSlab.ttf" />

Ответ 3

Ну!!
Этот вопрос довольно старый, но все же, если кто-то ищет ответ (в 2015 году) о том, как применять собственный шрифт ко всем текстовым изображениям через xml-код, см. Ниже:

Первая:
нам нужно добавить пользовательский шрифт внутри папки с ресурсами внутри вашего каталога приложений:
.ttf или .otf работают в случае Android

Второе:
Создайте класс CustomTextView, который расширяет TextView, как показано ниже:

public class CustomTextView extends TextView {

public CustomTextView(Context context) {
    super(context);
   }

public CustomTextView(Context context, AttributeSet attrs, int defStyleAttr)   {
    super(context, attrs, defStyleAttr);
   }

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

@Override
public void setTypeface(Typeface tf) {
    super.setTypeface(FontCache.getFont(getContext(),"fonts/<font_name>"));
   }
 }

Третье:
Класс FontCache используется внутри метода CustomTextView setTypeface(). Целью является базовое кэширование шрифтов с использованием HashMap:

public class FontCache {

private static Map<String,Typeface> fontMap = new HashMap<String,Typeface>();

public static Typeface getFont(Context context,String fontname){
    if(fontMap.containsKey(fontname)){
        return fontMap.get(fontname);
       }
    else{
        Typeface tf = Typeface.createFromAsset(context.getAssets(),fontname);
        fontMap.put(fontname,tf);
        return tf;
      }
    }
}

Четвертый: [Заключительный шаг] Все, что мы делаем сейчас, это использование CustomTextView непосредственно внутри нашего XML файла, где требуется текстовое представление пользовательского шрифта:

<<package_name>.CustomTextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Custom Font Text"
    android:textSize ="18sp"
    android:textAppearance="?android:textAppearanceSmall"
    android:id="@+id/custom_txt"
   />

Извините, если это уже было опубликовано где-то на SO. Просто подумал поделиться, если это кому-то поможет!!

Ответ 4

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

В этой библиотеке нет шрифта Verdana Font.

Но укажите следующие грани шрифтов. Что бы вы хотели использовать.

  • Roboto
  • Droid Serif
  • Droid Robot
  • Свобода
  • Fun Raiser
  • Android Nation
  • Зеленый авокадо
  • Признание

Просто:

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

Я автор этой библиотеки.

Ответ 5

Чтобы изменить (пользовательский) шрифт вашего приложения по всему миру, просмотрите Calligraphy

Просто добавьте каллиграфию в свой gradle.build и добавьте следующий фрагмент к вашему Application.onCreate():

CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
                        .setDefaultFontPath("fonts/MyCustomFont.ttf")
                        .setFontAttrId(R.attr.fontPath)
                        .build()
        );

и в каждом из действий добавьте следующее:

@Override
protected void attachBaseContext(Context newBase) {
    super.attachBaseContext(CalligraphyContextWrapper.wrap(newBase));
}

Это все, что вам нужно сделать, чтобы изменить шрифт глобально в вашем приложении. Взгляните на документы для более подробной информации.

Ответ 6

// My example show you how to change fonts into a normal textView or list view

create a fonts folder into your assets dir of android and copy your custom font in that ..
assets/fonts/monaco.ttf

// Font path
String fontPath = "fonts/monaco.ttf";

// Loading Font Face
Typeface tf = Typeface.createFromAsset(getAssets(), fontPath);

// CASE 1 : Inside your list view           
holder.name = (TextView) convertView
                .findViewById(R.id.textView_cityName);

// set name of text in each row 
holder.name.setText(CitiesNames.get(position));

// set the type of font you want to set
holder.name.setTypeface(tf);

// CASE 2 : Inside your text view

TextView tx = (TextView)findViewById(R.id.textview1);
tx.setTypeface(tf);

//vKj

Ответ 7

TextView textView = (Textview) findViewById(R.id.mytext);
Typeface face=Typeface.createFromAsset(getAssets(),
                                      "fonts/Verdana.ttf");
textView.setTypeFace(face);