سریعترین و آسونترین روش اعمال فونت دلخواه در اندروید
18 بهمن 1399 1399-11-18 16:40سریعترین و آسونترین روش اعمال فونت دلخواه در اندروید
سریعترین و آسونترین روش اعمال فونت دلخواه در اندروید
توی اندروید روش های مختلفی رو برای اعمال کردن فونت روی نوشته های خودمون داریم.
روش هایی مثل :
- با کدهای کاتلین یا جاوا به صورت typeFace
- با کدهای XML به صورت fontFamily
اینها روشهایی هستند که شاید بارها ازشون استفاده کرده باشیم.
توی روشهای بالا، باید برای هر ویویی که قرار هست نوشته (Text) نشون بده از جمله TextView – EditText – Button – RadioButton – CheckBox و … مدام فونت ست کنی.
فرض کن یه رابط کاربری سنگین داری، میخوای چیکار کنی؟
واسه تک تک این ویوها باید مجزا فونت ست کنی؟!
فکر نمیکنی که دیگه دورهی اینطور کد زدن ها تموم شده؟!
اگه اینطوری فکر نمیکنی، الان موقعهش شده که اینطوری فکر کنی😁
خب و اما راه حل چیه؟🤔
راه حل چیزیه که میخوام توی این پست معرفی کنم.
برای اینکه از فونتی که میخوای استفاده کنی، یکبار اعمال کنی و همه جا استفاده بشه، باید از کتابخونه ای به اسم Calligraphy (کالیگرافی) استفاده کنی.
برای اینکار این خط رو به app/build.gradle باید اضافه کنی و بعدش sync رو بزنی
implementation 'io.github.inflationx:calligraphy3:3.1.1' implementation 'io.github.inflationx:viewpump:2.0.3'
چون باعث میشه از اندروید 10 به بالا به مشکل بخوره.
اگه میخوای با این مشکل روبرو نشی، از این نسخه ای که قرار دادم یا بالاترش رو استفاده کن
حالا که پروژه با موفقیت sync شد، نوبت این رسیده که ازش استفاده کنیم.
اول از همه باید فونت مورد نظر رو به پروژه اضافه کنیم.
برای این کار یه پوشه به هر نامی (من با نام font میسازم) توی پوشه assets پروژه باید اضافه کنی.
اگه پروژهت پوشه assets رو نداره، میتونی توسط روش زیر این پوشه رو بسازی.
مراحل ساخت پوشه assets :
روی app کلیک راست کن و بعد New و سپس از بخش Folder میتونی Assets Folder رو انتخاب کنی.
عکس زیر رو هم ببین که بهتر کمکت میکنه.

الان فقط کافیه که فونت مورد نظرت رو به پوشه font اضافه کنی.
بعد از اینکه فوقت رو اضافه کردی، الان کافیه که فقط 2 مرحله دیگه رو هم انجام بدی و بعد دیگه کار تمام!
کدهای کلاس Application :
کد زیر رو باید به متد onCreate کلاس Application پروژه اضافه کنی.
ViewPump.init( ViewPump.builder() .addInterceptor( CalligraphyInterceptor( CalligraphyConfig.Builder() .setDefaultFontPath("font/iran_sans.ttf") .build() ) ) .build() )
ViewPump.init(ViewPump.builder() .addInterceptor(new CalligraphyInterceptor( new CalligraphyConfig.Builder() .setDefaultFontPath("font/iran_sans.ttf") .setFontAttrId(R.attr.fontPath) .build())) .build());
کدهای کلاس Activity :
با تکه کد قبلی کدهای مربوط به Calligraphy رو به کلاس Application که کلاس تنظیمات اصلی پروژه هست اضافه کردیم.
الان فقط کافیه که کد زیر رو به Activityهایی که قصد داری فونت ویوهای اونا تغییر کنه، اضافه کنی.
override fun attachBaseContext(newBase: Context) { super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)) }
@Override protected void attachBaseContext(Context newBase) { super.attachBaseContext(ViewPumpContextWrapper.wrap(newBase)); }
کدهای بالا درواقع فونت و تنظیمات مربوط به Calligraphy رو به Context اصلی اکتیویتی اضافه میکنه.
راستی، دیگه نیاز نیست این رو برای فرگمنتها هم اضافه کنی.
چون parent (والد) فرگمنتها اکتیویتیها هستند، پس فونت روی ویوهای فرگمنت هم اعمال میشه.