Подключение шрифтов в своем проекте

от автора

Привет, всем!

Каждый, кто разрабатывал хоть одно приложение под андроид, задумывался о том как бы подключить к своему проекту кастомный шрифт. Вот и я задался этим вопросом. Есть несколько способов.

Вод один из них:

	String custom_font = "fonts/custom_font.ttf";         Typeface CF = Typeface.createFromAsset(getAssets(), custom_font);          ((TextView) findViewById(R.id.sometextview)).setTypeface(CF); 

Допустим у вас множество элементов TextView и как бы писать под каждый из них подключение шрифта — получается куча строк. Мне это не подошло и я начал искать дальше. Нашел один из вариантов, которым я собственно и хотел поделится.

Создаем класс TextViewPlus:

TextViewPlus.java

package com.example;  import android.content.Context; import android.content.res.TypedArray; import android.graphics.Typeface; import android.util.AttributeSet; import android.util.Log; import android.widget.TextView;  public class TextViewPlus extends TextView {     private static final String TAG = "TextView";      public TextViewPlus(Context context) {         super(context);     }      public TextViewPlus(Context context, AttributeSet attrs) {         super(context, attrs);         setCustomFont(context, attrs);     }      public TextViewPlus(Context context, AttributeSet attrs, int defStyle) {         super(context, attrs, defStyle);         setCustomFont(context, attrs);     }      private void setCustomFont(Context ctx, AttributeSet attrs) {         TypedArray a = ctx.obtainStyledAttributes(attrs, R.styleable.TextViewPlus);         String customFont = a.getString(R.styleable.TextViewPlus_customFont);         setCustomFont(ctx, customFont);         a.recycle();     }      public boolean setCustomFont(Context ctx, String asset) {         Typeface tf = null;         try {         tf = Typeface.createFromAsset(ctx.getAssets(), asset);           } catch (Exception e) {             Log.e(TAG, "Could not get typeface: "+e.getMessage());             return false;         }          setTypeface(tf);           return true;     }  } 

Файл атрибутов:
attrs.xml (res/values)

<?xml version="1.0" encoding="utf-8"?> <resources>     <declare-styleable name="TextViewPlus">         <attr name="customFont" format="string"/>     </declare-styleable> </resources> 

И собственно main.xml

<?xml version="1.0" encoding="utf-8"?> <LinearLayout      xmlns:android="http://schemas.android.com/apk/res/android"     xmlns:foo="http://schemas.android.com/apk/res/com.example"     android:orientation="vertical" android:layout_width="fill_parent"     android:layout_height="fill_parent">      <com.example.TextViewPlus         android:id="@+id/textViewPlus1"         android:layout_height="match_parent"         android:layout_width="match_parent"         android:text="@string/showingOffTheNewTypeface"         foo:customFont="saxmono.ttf">     </com.example.TextViewPlus> </LinearLayout> 

Файл шрифта «saxmono.ttf» необходимо положить в папку «assets»

На этом все:)

Источники:

ссылка на оригинал статьи http://habrahabr.ru/post/184116/


Комментарии

Добавить комментарий

Ваш адрес email не будет опубликован. Обязательные поля помечены *