منابع آموزشی در رابطه با Style و Theme

همیشه توی ذهنم یه عذاب وجدانی داشتم از اینکه توی Theme و Styleهای اندروید ضعیف هستم. گاهی بنظرم بدرد نخور بود و گاهی خیلی پیچیده! تا اینکه تصمیم گرفتم بطور فشرده یه هفته‌ای در رابطه باهاش تحقیق کنم. یه سری مقاله خوندم و ارائه‌های مرتبط رو‌ نگاه کردم، الان دیگه واقعا دیدم به Style و Theme توی اندروید عوض شد، قبلا چون این چیزارو بلد نبودم، برای کاستومایز کردن بعضی چیزا راه‌های سختتری میرفتم. برای شروع سعی کردم چیزهایی که یاد گرفتمو روی اپ Wood Working Tools پیاده کنم. در آینده حتما بیشتر از Theme و Style توی اپ‌هام استفاده می‌کنم. در ادامه لیست مقاله‌‌ها و ارائه‌هایی که بنظر خوب بودن رو به همراه نکات جالبشون نوشتم. اگر شمام مثل من دوست دارید بیشتر با Style و Theme توی اندروید آشنا بشید، حداقل سعی کنید همه‌ی منابع زیر رو بررسی کنید.

1- Android styling: themes vs styles

https://medium.com/androiddevelopers/android-styling-themes-vs-styles-ebe05f917578

این مقاله برای شروع خیلی خوبه. در رابطه با تفاوت Style و Theme صحبت می‌کنه. یکی از بدی‌های Theme و Style این هست که برای تعریف جفتشون باید از تگ یکسان Style استفاده کرد.

توی مقاله یه مثال جالب میزنه، اونم اینه که اگر از attributeهای Theme توی پروژه استفاده کنیم (بجای استفاده مستقیم از ریسورسهایی مثل رنگ و …)، شبیه این میمونه توی کدهامون بجای اینکه مستقیما از یه کلاس استفاده کنیم از اینترفیس استفاده کرده باشیم. در نتیجه میتونیم پیاده‌سازیهای مختلفی برای حالت شب و روز و … داشته باشیم.

بخش Scopeش هم جالبه.


2- Android styling: common theme attributes

https://medium.com/androiddevelopers/android-styling-common-theme-attributes-8f7c50c9eaba

اگر مقاله اول رو خونده باشید، متوجه شدید که چرا بهتره از Attributeهای Theme استفاده کنیم. توی این مقاله میتونید Attributeهایی که خیلی پرکاربرد هستند رو یاد بگیرید.


3- Android Styling: prefer theme attributes

https://medium.com/androiddevelopers/android-styling-prefer-theme-attributes-412caa748774

این مقاله هم در مورد استفاده از Attributeهای Theme هست. تقریبا همیشه باید در همه جا از Attributeها استفاده کنید، مگه حالت استثنایی باشه که خود مقاله براش یه مثال میزنه.

در مورد استفاده از Attributeها توی ColorStateList هم صحبت میکنه.


4 - Themes overlay

Android Styling: themes overlay

https://medium.com/androiddevelopers/android-styling-themes-overlay-1ffd57745207

Refactoring Android Themes with Style: Theme Overlays

https://ataulm.com/2020/05/28/refactoring-themes-with-style-theme-overlays.html

همیشه این Theme Overlayها برام گنگ بود، برای رنگ دادن به Toolbar ازشون استفاده کرده بودم ولی خب خیلی درک خاصی ازشون نداشتم. مثلا نمیدونستم خودم کجا باید Theme Overlay تعریف کنم. این دو تا مقاله واقعا دید خوبی بهم داد. مخصوصا بخش Theme overlays in default styles رو توی مقاله دوم خیلی دوست داشتم، تازه فهمیدم دلیل وجود Attributeیی به اسم materialThemeOverlay چیه.


5- Refactoring Android Themes with Style

Part 1: Restructuring Themes

https://ataulm.com/2020/04/30/refactoring-themes-with-style.html

Part 2: Default Styles

https://ataulm.com/2020/05/07/refactoring-themes-with-style-default-styles.html

Part 3: Theme Overlays

https://ataulm.com/2020/05/28/refactoring-themes-with-style-theme-overlays.html

این سه مقاله‌ هم واقعا عالی و کاربردی هستن، همه چیز کامل و با مثال توضیح داده شده. قضیه مقاله‌ها اینه که تیم توسعه Monzo بعد دیدن یه ارائه توی سال ۲۰۱۹ (لینکش در ادامه هست)، تصمیم گرفته بخش Theme و Style اپ‌شون رو ریفکتور کنه و از Best Practiceهایی که توی ارائه گفته شده استفاده کنند. فرآیندی که طی کردن و تجربیاتی که بدست آوردن توی این سه مقاله نوشته شده.

مقاله سوم رو توی یه آیتم دیگه هم معرفی کردم. ولی دلم نیومد اینجا سه تاشون رو دوباره با هم نذارم. اشکال نداره شما هم دوبار بخونیدش D:


6- Android themes & styles demystified - Google I/O 2016

https://www.youtube.com/watch?v=TIHXGwRTMWI

این فیلم چند نکته باحال یاد میده:
- اولیش مهم نیست ولی برام جالب بود، این بود که فهمیدم قضیه این res-auto توی آدرس xmlns چیه. D: تاحالا نمیدونستم دلیل اسمش چیه.

- دومیش اینه که یه مثال از پیاده‌سازی Style و Theme دکمه (Button) توی متریال کامپوننت میزنه که خوبه. خوبیش اینه آدم میبینه پیاده‌سازیش چطوره، بعد اگر بخواد چیزی پیاده‌سازی کنه یا حتی مهمتر مثلا رنگ و قیافه Button رو عوض بکنه، راحت میتوجه بشه باید چیارو ست کنه یا تغییر بده.

- سومیش اشتباهات رایجه که آخر ارائه میگه، دیدنشون خالی از لطف نیست. توی بخش اشتباهات رایج در مورد resolve شدن Attributeها صحبت میشه. اگر دوست داشتید این مقاله هم در همین رابطه هست. برای اطلاعات بیشتر میتونید بخوندیش.

https://ataulm.com/2019/10/28/resolving-view-attributes.html


7- Best Practices for Themes and Styles (Android Dev Summit '18)

https://www.youtube.com/watch?v=sNSlDfaNq-0

یه نکته‌ی خیلی جالب این فیلم برای من همون اول فیلمه که آموزش میده چطوری رنگ‌ها رو نامگذاری کنیم. مثلا اگر دیزاینر یه رنگ جدید استفاده که غیر از رنگ‌های Primary و PrimaryVariant هست، باید با چه اسمی براش Attribute درست کنیم.

وسط‌های این ارائه در مورد تغییر دادن رنگ یه دکمه صحبت میکنه، حتما ببینیدش. من قبلا‌ فکر میکردم بعضی از اینا که توی stackoverflow سوال‌های مرتبط به اینجور چیزهارو جواب میدن، چقدر خفنن! واقعا نمیدونستم اینقدر راحت میشه فهمید چطوری باید ظاهر یه دکمه کاستومایز کرد.


8- Developing themes with style (Android Dev Summit '19)
https://www.youtube.com/watch?v=Owkf8DhAOSo

دوباره توی این ارائه در مورد این صحبت میشه که چرا باید از Attributeها استفاده کرد. این نکته رو تقریبا توی بیشتر ارائه‌‌ها یا مقاله‌ها میشه دید. اگر هنوز اینکارو نمیکنید، مثالی که توی این ارائه زده رو نگاه کنید، شاید نظرتون عوض شد و در آینده همیشه از Attributeها استفاده کردید.

یه بخش مهم دیگه ارائه اونجاش هست که در مورد نامگذاری Style و Themeها صحبت میکنه. اینکه چطور اون سلسله مراتبی نامگذاریشون کنید. این نامگذاری‌ Style و Themeها همیشه برای من سوال بود تا بالاخره توی این ارائه فهمیدم قضیه‌اش چیه (توی سه مقاله ریفکتورینگ هم در این رابطه صحبت میکنه، بنظرم اونو هم بخونید). حتی توضیح میده بهتره Themeها و Styleهارو توی فایل‌های جدا بذارید.

آخر ارائه در مورد یه قضیه‌ای صحبت میکنه که من تا حالا فکر میکردم کار درست رو انجام میدم چون خود اندروید استودیو هم پروژه رو اینجوری میسازه، ولی خب اشتباه بوده!! اونم این بود که میگه اسم رنگ‌هارو نباید توی فایل colors.xml یه چیزهایی مثل priamaryColor و … بذاریم. باید دقیقا اسمشو مثل indigo_500 یا indigo_200 بنویسی. نامگذاری‌های انتزاعی مثل priamaryColor برای attributeهای Theme هست.


9- The Components of Material Design (Android Dev Summit '18)

https://www.youtube.com/watch?v=DPH3F0v1jB0

این ارائه هم هست که در مورد متریال دیزاین صحبت میکنه. اگر داکیومنت متریال رو کامل بخونید و مقاله یا فیلم‌هایی که گفتمو دیدید، بیشتر بخش‌های این ارائه براتون تکراری میشه. ولی اگر وقت دارید ببینیدش. توی یه بخشش نشون میده اگر کاستوم ویو میسازید، چطوری باید داخلش از Theme و Style که بهش ست میشه استفاده کنید یا اصلا چطوری میشه Style پیشفرض براش تعریف کرد. یه مثال هم میزنه چطوری یه اپی که قبلا نوشته شده رو میشه Theme و Styleهاشو به متریال تغییر داد.