android Development

استفاده از فونت دلخواه در اندروید

فرض کنید در برنامه اندرویدی خود می‌خواهید از یک فونت دلخواه استفاده کنید. همانطور که می‌دانید سیستم عامل اندروید به طور پیشفرض فونتی به نام Droid Naskh دارد که برای پیاده‌سازی برنامه‌های ایرانی مناسب و استاندارد است. اما ممکن است استفاده از این فونت در هر نوع برنامه‌ای مناسب نباشد. در چنین حالتی برای تغییر فونت، مثلا برای یک TextView می‌توانیم از TypeFace استفاده کنیم.

فونت دلخواه با Typeface

برای استفاده از Typefaceدر اندرویید مراحل زیر را دنبال کنید:

۱- به مسیر پروژه اندرویدی خود بروید.

۲- به آدرس  app>src>main بروید.

۳- در این مسیر پوشه assets را بسازید و داخل آن پوشه fonts را بسازید.

۴- فایل فونت دلخواه خود را در پوشه fonts قرار دهید.

۵- حال به اندروید استودیو رفته و در هر کجای پروژه که می‌خواهید از فونت دلخواه استفاده کنید، مانند کد زیر عمل کنید:


TextView tx = (TextView)findViewById(R.id.textview1);
Typeface custom_font = Typeface.createFromAsset(getAssets(), "fonts/abc.ttf");
tx.setTypeface(custom_font);

در کد بالا یک TextView با نام tx که در layout مربوط به Activity با شناسه(id) textview1 مشخص شده است را انتخاب کرده و typeface خود را بر روی آن اعمال می‌کنیم. بهتر است کد بالا را در متد onCreate مربوط به Activity مورد نظر قرار دهید تا در زمان ساخت Activity تغییر فونت اعمال شود.

تغییر فونت پیشفرض برنامه به فونت دلخواه

در قسمت اول آموختیم که چگونه فونت یک TextView را تغییر دهیم. اما چگونه می‌توانیم فونت تمام Component های برنامه‌مان را تغییر دهیم؟ اگر بخواهیم با روش بالا این کار را انجام دهیم، حجم زیادی از کدهای تکراری را باید بنویسیم که باعث سردرگمی ما خواهد شد.

راه حل ساده‌تر استفاده از یک کتابخانه برای تغییر فونت است. این کتابخانه Callygraphy نام دارد. برای افزودن این کتابخانه به برنامه کافیست خط زیر را به فایل gradle برنامه و در قسمت dependencies اضافه کنیم:


implementation 'uk.co.chrisjenx:calligraphy:2.3.0'

حال مانند مرحله قبل پوشه fonts را ساخته و فایل فونت را داخل آن قرار می‌دهیم. برای اعمال فونت دلخواه بر روی هر Component کافیست در فایل layout مربوط به Activity خصوصیت fontPath را مانند نمونه زیر قرار دهید:


<TextView fontPath="fonts/MyFont.ttf"/>

اما مسئله‌ای که هنوز هم حل نشده این است که چگونه فونت پیشفرض Activity را تغییر دهیم که نیاز نباشد تا فونت هر Component را مشخص کنیم؟

چاره این کار این است که از CalligraphyConfig در کلاس Application و در متد onCreate استفاده کنیم. برای اینکار نیاز به کد زیر داریم:


@Override
public void onCreate() {
super.onCreate();
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/Roboto-RobotoRegular.ttf")
.setFontAttrId(R.attr.fontPath)
.build()
);
//....
}

اگر نمی‌دانید کلاس Application چیست و چگونه باید آن را بسازید، یک کلاس به پروژه خود اضافه کنید و داخل آن کد زیر را قرار دهید:


package com.yourapp.app;

import android.app.Application;
import android.support.v7.widget.AppCompatTextView;

import uk.co.chrisjenx.calligraphy.CalligraphyConfig;

public class YourApplication extends Application {

// Overriding this method is totally optional!
@Override
public void onCreate() {
super.onCreate();
// Required initialization logic here!
CalligraphyConfig.initDefault(new CalligraphyConfig.Builder()
.setDefaultFontPath("fonts/Vazir.ttf")
.addCustomStyle(AppCompatTextView.class, android.R.attr.textViewStyle)
.setFontAttrId(R.attr.fontPath)
.build()
);
}
}

در کد بالا نام پکیج را بر اساس پروژه خود تغییر دهید. همچنین نام کلاس(YourApplication) را به نام دلخواه خود تغییر دهید. توجه داشته باشید که نام کلاس و نام فایل یکی باشد.

در ادامه به فایل Manifest.xml پروژه رفته و در داخل تگ application مقدار android:name را برابر با نام کلاس Application که ایجاد کردیم قرار دهید.

android:name=".YourApplication"

حال برای هر Activity که می‌خواهید بصورت پیشفرض تمام Component های آن با فونت دلخواه نمایش داده شوند، کافی قطعه کد زیر را به کلاس آن Activity اضافه کنید:


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

موفق و پیروز باشید.

به این مطلب امتیاز بدهید

دیدگاهتان را ثبت کنید

آدرس ایمیل شما منتشر نخواهد شدعلامتدارها لازمند *

*

bigtheme