0

استفاده از فونت دلخواه در برنامه نویسی اندروید ، آموزش Typeface در محیط اندروید استودیو

دسته بندی ها : آمزشهای رایگان, آموزش های سریع و مفید ۱۸ خرداد ۱۳۹۸ مدیریت 78 بازدید
تغییر فونت در کل برنامه اندروید استودیو
سلام ؛
به احتمال بالا خیلی از شما دوستان عزیز مثل خودم عاشق این هستید که ظاهر برنامه خودتون رو زیبا کنید ،
امروز می خوام بهتون یاد بدم که چی جوری در محیط اندروید استودیو به کمک فونت ها برنامه خودتون رو جذاب تر کنید ،
شما یاد خواهید گرفت که به هر بخش از برنامه خودتون که دوست داشتید یک فونت زیبا اعمال کنید و یا با یک دستور (کتابخانه Calligraphy) کل برنامه تغییر فونت انجام دهید .
پس با ما باشید …
مرحله اول : انتخاب یک فونت مناسب

اول از همه باید یک فونت زیبا داشته باشید و حتما حتما فرمت اون هم .ttf باشد ،
من در این آموزش می خوام از فونت Dast_Nevis.ttf استفاده کنم ،
یه نکته ای که هست فونت های رایگان از نظر ساخت و طراحی یه خورده دارای مشکل هستند ،

مرحله دوم : وارد کردن فونت به پروژه اندروید

سپس روی پوشه main راست کلیک کرده و New–>Directory را انتخاب کنید.نام پوشه جدید را assets انتخاب می کنیم(دقت کنید که نام پوشه دقیقا همین واژه باشد)

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

سپس روی پوشه assets راست کلیک کرده و New–>Directory را انتخاب کنید این بار پوشه ای با نام دلخواه ایجاد کنید. (مثلا fonts)
سپس فونت مورد نظر خود را در پوشه ای که در مرحله قبل ساختید (مثلا fonts) کپی کنید.

ست کردن فونت

حالا مسیر پروژه را از Project به Android تغییر می دهیم (تا در ادامه یک متن در برنامه ایجاد کنیم و فونت آن را تغییر دهیم)
ابتدا در مسیر res–>layout ، فایل layout مربوط به اکتیویتی خود را باز کنید و در قسمت Text آن یک TextView ایجاد کنید و یک id دلخواه برای آن تعریف کنید.(مثلا text1).مثال:

• حالا می خواهیم فونت این TextView را تغییر دهیم. ابتدا از مسیر app–>java فایل اکتیویتی خود را باز کنید.
همانطور که در جلسه نهم گفتیم برای اینکه روی اشیایی که در layout اضافه کردیم (مثل TextView) رفتاری اعمال کنیم، لازم است در اکتیویتی یک متغیر تعریف کنیم و آن متغیر را با کمک id به آن شی(مثلا TextView) لینک کنیم .
حالا هر تغییری که روی متغیر اعمال کنیم روی شی ما هم اعمال می شود. ما در اینجا متغیری با نام text ایجاد می کنیم:

 

• بعد از اینکه برای شی موجود در layout (در اینجاTextView) یک متغیر در اکتیویتی ایجاد کردیم، حالا نوبت به تعیین فونت آن می رسد.
در متد OnCreate ، یک متغیر از نوع Typeface تعریف می کنیم (مثلا type ) سپس با کمک دستورات زیر فونتی که در ابتدا در پوشه fonts قرار دادیم ، به type اختصاص می دهیم.

 

• و با کمک دستور زیر فونت متغیر text ( که با شی موجود در layout لینک شده) را با type ست می کنیم.

 

اجرای برنامه

خب حالا برنامه را اجرا می کنیم تا خروجی را ببینیم.
کار به پایان رسید و نحوه افزودن فونت دلخواه به اندروید استودیو آشنا شدیم. امیدواریم از این آموزش لذت برده باشید.

تغییر فونت در کل برنامه توسط کتابخانه Calligraphy:

در روش‌هایی که تاکنون بررسی شد، برای هر ویجت باید فونت را جداگانه تعریف می‌کردیم. برای اپلیکیشنی که تعداد کمی ویجت دارد یا قصد اعمال فونت فقط در تعداد محدودی از ویجت‌ها را داریم، این روش‌ها ساده و مناسب خواهد بود. اما در مواردی که در حال توسعه یک اپلیکیشن با اکتیویتی‌ها و ویجت‌های متعدد هستیم و لازم است فونت روی همه آنها اعمال شود، استفاده از روش‌های فوق منطقی نیست و علاوه بر صرف زمان زیاد، احتمال خطا را نیز افزایش می‌دهد. در اینصورت لازم است راهی را انتخاب کنیم که بتوان یک فونت را در سراسر پروژه تعریف کرد بدون آنکه نیاز به اعمال تغییرات روی تک تک ویجت‌ها (مانند TextView، Toolbar، Menu و…) باشیم.
در حال حاضر متداول‌ترین راه برای این کار، استفاده از کتابخانه‌ی Calligraphy است که توسط شخصی با نام Christopher Jenkins تهیه و در گیت هاب و به صورت رایگان در دسترس توسعه دهندگان قرار گرفته است:

https://github.com/chrisjenx/Calligraphy.

مطابق توضیحات موجود در صفحه گیت هاب، کتابخانه را به بلاک dependencies در build.gradle(app) اضافه و پروژه را سینک می‌کنم تا کتابخانه دانلود شود:

 

در قدم بعد لازم است یک کلاس به پکیج اصلی پروژه اضافه کرده و سپس آنرا از کلاس Application ارث بری کنیم. یک کلاس با نام دلخواه Calligraphy ایجاد کردم:

 

سپس یک متد onCreate() به صورت زیر به کلاس اضافه می‌کنم:

 

کد متد را می‌توانید از سورس پروژه یا صفحه گیت هاب کتابخانه کپی کرده و فقط مسیر فونت مدنظر خود را در ورودی setDefaultFontPath() اصلاح کنید. به جهت تشخیص بهتر، از یک فونت متفاوت با دو فونت قبل استفاده می‌کنم. این کتابخانه نیز فونت را از assets می‌خواند بنابراین فونت yekan.ttf را مانند مرحله قبل به assets/fonts اضافه کردم:

لازم است این کلاس را در مانیفست پروژه (AndroidManifest.xml) توسط خاصیت android:name معرفی کنیم:

 

حالا کافیست متد زیر را در اکتیویتی یا اکتیویتی‌هایی که قصد داریم از این فونت تاثیر بپذیرند اضافه کنیم:

 

MainActivity.java:

 

من یک Toolbar جایگزین اکشن‌بار پیش فرض کردم تا نتیجه را بهتر درک کنید.

activity_main.xml:

 

یک TextView دیگر با شناسه txt_four و یک Button در صفحه قرار دادم که نه از طریق xml و نه java فونتی روی آن اعمال نشده.
پروژه را اجرا می‌کنم:

ملاحظه می‌کنید title تولبار، TextView چهارم و Button، فونت yekan که در کالیگرافی تعریف شده را نشان می‌دهند. حتی TextView اول که فونت mitra در xml اعمال شده بود نیز فونت yekan را نمایش می‌دهد. یعنی فونت Calligraphy روی همه آیتم‌های درون اکتیویتی اعمال می‌شود مگر اینکه توسط Typeface فونتی متفاوت از آن تعریف شده باشد (مانند TextView شماره دو و سه).
با استفاده از Calligraphy هم می‌توان مستقیم و بدون نیاز به کدهای جاوا، روی ویجت‌ها و از طریق xml فونت اعمال کرد. اینکار عینا مانند روش xml ابتدای مبحث انجام می‌شود با این تفاوت که به‌جای خاصیت fontFamily از fontPath استفاده می‌کنیم و فایل فونت نیز باید در assets قرار گرفته باشد. یک فونت دیگر با نام beirut.ttf به فولدر fonts در assets اضافه می‌کنم:

سپس یک دکمه دیگر به صفحه اضافه کرده و فونت را توسط fontPath تعریف می‌کنم:

 

 

دکمه دوم فونت beirut را نشان می‌دهد.
شاید این سوال برایتان پیش آمده که تفاوت این روش و روش اول مبحث که هردو توسط یک خاصیت در xml انجام می‌شوند چیست و ما باید کدام گزینه را انتخاب کنیم؟
یک اصل کلی در توسعه برنامه‌ها (چه در بستر موبایل، وب و یا دسکتاپ) این است که تا حد امکان استفاده از کتابخانه‌ها و پلاگین‌ها به حداقل برسد ترجیحا از امکانات داخلی ای که در اختیار داریم بهره ببریم تا هم حجم برنامه و هم ایرادات، باگ‌ها و تداخلات احتمالی کتابخانه‌ها با سایر اجزای پروژه به حداقل برسد. یعنی در اینجا اگر نیازی به تغییر فونت سراسر پروژه نداشته و تنها چند ویجت محدود باید تغییر کند، بهتر است از کتابخانه Calligraphy صرف نظر نموده و از راهکارهای داخلی اندروید مانند xml و Typeface استفاده کنیم. اما در صورتی که نیاز به تغییر فونت کل پروژه بود، ناگزیر به استفاده از این کتابخانه هستیم و همانطور که در صفحات قبل مشاهده کردید، با اعمال فونت توسط کتابخانه، ویجتی که توسط fontFamily تعریف شده بود در عمل این خاصیت را از دست داده و فونت جدید در واقع روی آن Override می‌شود. بنابراین در این شرایط، برای تغییر یک یا چند ویجت محدود، می‌بایست از خاصیت xml مربوط به خود کتابخانه یعنی fontPath و یا Typeface بهره گرفت.
طبیعتا خاصیت مربوط به فونت را می‌توان در یک style نیز تعریف کرد تا لازم نباشد برای تک تک ویجت‌های مدنظر جداگانه تعریف گردد:

 

با تعریف استایل فوق، هر ویجت و کامپوننتی که استایل CustomFontStyle را بپذیرد فونت نیز اعمال خواهد شد:

 

نکته: خاصیت fontPath بدون پیشوند android: یا app: بوده و به همین دلیل اندروید استودیو اخطاری با همین مضمون اعلام می‌کند که جای نگرانی نیست و خللی در کار ایجاد نمی‌کند. با اینحال اگر تمایل دارید این اخطار از محیط IDE شما حذف شود، راهکار آن در صفحه گیت‌هاب کتابخانه ذکر شده است.

مدیریت

برنامه نویسی در زمینه اندروید استودی و ویژوال استودیو و انجام پروژه های متعدد برنامه نویسی.

مطالب زیر را حتما بخوانید:

قوانین ارسال دیدگاه در سایت

چنانچه دیدگاهی توهین آمیز باشد و متوجه اشخاص مدیر، نویسندگان و سایر کاربران باشد تایید نخواهد شد.

چنانچه دیدگاه شما جنبه ی تبلیغاتی داشته باشد تایید نخواهد شد.

چنانچه از لینک سایر وبسایت ها و یا وبسایت خود در دیدگاه استفاده کرده باشید تایید نخواهد شد.

چنانچه در دیدگاه خود از شماره تماس، ایمیل و آیدی تلگرام استفاده کرده باشید تایید نخواهد شد.

چنانچه دیدگاهی بی ارتباط با موضوع آموزش مطرح شود تایید نخواهد شد.

نظرات کاربران

پاسخی بگذارید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

لینک کوتاه :

عضویت در خبرنامه ویژه مشتریان بوکزار

با عضویت در خبرنامه ویژه بوکزارپلاس از آخرین جشنواره های سایت باخبر شوید!