تغییر versionName اپلیکیشن اندرویدی در هر Build

استاندارد

این پست راجع‌به تغییر versionName برنامه به صورت اتوماتیکه ، یعنی چی ؟ یعنی میخوایم با هربار گرفتن خروجی از پروژه اندرویدیمون اسم ورژن اپلیکیشنمون رو تغییر بدیم .

خب شاید براتون این سوال پیش اومده باشه که اصن چرا ما باید یه همچین کاری رو انجام بدیم ؟
این کار به شما کمک میکنه وقتی تغییری توی اپلیکیشن اعمال میکنید و اون رو برای تست در اختیار کاربرانتون قرار میدین ، بتونید نظرات اون‌ها رو با توجه به نسخه اپلیکیشن برسی کنید .
این کار بیشتر در روند توسعه و تست‌هایی که توسط بتا تستر‌ها قبل از انتشار اپلیکیشن انجام میشه کاربرد داره .

برای انجام این کار در اندروید استدیو کافیه که فایل build.gradle مربوط به ماژول اصلی پروژتون‌ ( ماژول app ) رو باز کنید و  versionName داخل defultConfig رو مثل زیر تغییر بدید . همینطور تابع getDate رو به فایل build.gradle تون اضافه کنید .

کد بالا در هربار گرفتن خروجی از پروژه ، مقدار versionName رو برابر با ترکیب کلمه Beta و زمان گرفتن شدن خروجی قرار میده .
حالا تنها کاری که باید انجام بدین نمایش versionName توی اپلیکیشنه تا کاربرتون بتونه اون رو ببینه . مثلا در صفحه‌ اسپلش یا درباره ما .

وقتی پسورد keystore اپلیکیشن رو فراموش کردیم !

استاندارد

یکی از بدترین اتفاقاتی که میتونه برای یک توسعه‌دهنده اندروید بیوفته ، فراموش کردن اطلاعات مربوط به sign اپلیکیشنه .
چرا ؟‌ چون بدون داشتن این اطلاعات باید فکر بروزرسانی کردن اپلیکیشنتون روی مارکت‌ها رو از سرتون بیرون کنید . منظور از بروزرسانی ، امکان نصب نسخه جدید به روی نسخه قدیمی بدون بوجود اومدن خطا در حین این کاره . یعنی کاربرتون به‌راحتی بدون نیاز به پاک کردن نسخه قدیمی نسخه جدید اپلیکیشنتون رو نصب کنه .
حالا چه اتفاقی میوفته اگه نسخه جدید اپلیکیشنمون رو با اطلاعاتی متفاوت از چیزی که نسخه‌‌های قبلی رو با اون sign کردیم sign کنیم ؟‌ تو این حالت اگه کاربرمون بخواد نسخه جدید رو نصب کنه به error زیر بر میخوره ( یا یه همچین چیزی ) .
photo_2016-06-21_11-07-06
در این حالت تنها کاری که کاربر میتونه برای نصب نسخه جدید انجام بده ، حذف نسخه قدیمی و بعد از اون نصب نسخه جدیده (که با این کار کاربرتون اطلاعات درون اپلیکشن رو از دست میده ).
خب حالا اگه این اتفاق بیوفته چیکار میتونیم بکنیم ؟
اول از همه اگه فایل keyStore تون رو گم کردین متاسفانه راهی براتون نمیمونه جز اینکه بیخیال بروزرسانی کردن نسخه قدیمی اپلیکیشنتون بدون حذف کردنش بشید .
ولی اگه فایل keyStore تون رو گم نکردید و فقط پسورد اون رو به خاطر نمیارید ، هنوز جای امیدواری هست .     به خواندن ادامه دهید

پیاده‌سازی Bottom navigation در متریال دیزاین

استاندارد

توی پست قبلی کمی راجع‌به خود Bottom navigation صحبت کردیم و باید و نباید‌هایی رو که باید برای پیاده‌سازی در نظر داشته باشیم رو برسی کردیم . حالا وقتشه که کمی هم درباره پیاده‌سازی این مدل صحبت کنیم . توی این پست ما قراره یک Bottom navigation بسازیم با تب‌های خانه ، پروفایل و نقشه و به وسیله اون بین صفحات مختلف حرکت کنیم . برای انجام این کار از کتابخونه AHBottomNavigation استفاده میکنیم .

ابتدا کتابخونه رو به پروژمون اضافه میکنیم .

توی اولین مرحله لازمه صفحات خانه ، نقشه و پروفایلمون رو بسازیم. برای این کار یک Fragment ساده مثل کد زیر میسازیم و با استفاده از یک TextView مشخص میکنیم الان توی کدوم صفحه هستیم .

حالا باید یک Adapter برای تغییر ViewPager بنویسیم .

در مرحله بعدی صفحه‌ای که میخوایم توی اون از Bottom navigation استفاده کنیم رو میسازیم .

برای View اصلی بهتره که از CoordinatorLayout استفاده کنیم تا اگه خواستیم از المان‌های دیگه مربوط به متریال رو توی صفحه‌مون استفاده کنیم به مشکلی برنخوریم . همینطور بهتره از ViewPager خود کتابخونه استفاده کنیم وگرنه باید ViewPager مون رو طوری تغییر بدیم که با حرکت دست نشه بین صفحه‌های مختلفش حرکت کرد.

و در مرحله آخر Activity ای که قراره Bottom navigation توی اون نمایش داده بشه رو میسازیم .

در کد بالا آرایه‌ای از تب‌هامون رو با استفاده از AHBottomNavigationItem میسازیم و اون رو به AHBottomNavigation مون اضافه میکنیم .
تابع  ()bottomNavigation.setColored یک مقدار boolean دریافت میکنه که به وسیله اون مشخص میکنه که توی انتخاب تب‌ها رنگ Bottom navigatoin رو به رنگ استفاده شده در AHBottomNavigationItem تغییر بده یا نه .

و این هم چیزی خواهد بود که در نهایت خواهیم داشت .

Screenshot_2016-05-31-10-27-03

معرفی Bottom navigation در متریال دیزاین

استاندارد

چند وقت قبل اندروید مدل جدیدی رو برای navigation در داخل اپلیکیشن‌ها معرفی کرد .مدلی به اسم Bottom navigation . چیزی خیلی شبیه به  مدل تب‌هایی( Tabs ) که از قبل در اندروید موجود بود ، ولی خیلی نزدیک‌تر به چیزی که توی IOS دیده بودیم  .bottom_nav توی این مدل تب‌ها از بالا به پایین صفحه منتقل شدند و کمی هم باید و نباید‌های جدید نسبت به مدل تب‌های سابق به اونها اضافه شده .
چیزی که توی این معرفی جالبه، اینه که قبلا بیشتر توسعه دهنده‌ها از جمله خودم وقتی کسی راجع‌به قرار دادن تب‌ها در پایین صفحه باهاشون حرف میزد ، یسری دلایل کاملا منطقی میاوردن که چرا پیاده کردن این مدل خیلی ایده خوبی نیست . یکی از مهم‌ترین این دلایل وجود ۳ دکمه اساسی هست که در پایین صفحه وجود داره و با قرار دادن تب‌ در اون ناحیه امکام وقوع اتفاق پیشبینی نشده (  مثلا کاربر دستش بخوره به یک دکمه که توقع‌ شو نداشته باشه ) بالا میره . با وجود معرفی رسمی این مدل ، من شخصا هنوز هم جزو طرفدار‌های این مدل نیستم و به نظرم ایراداتی که از قبل وجود داشته ، هنوز هم وجود داره . ولی با توجه به این موضوع که حالا این مدل توی Desing pattern های اندروید اومده و خیلی از اپلیکیشن‌های پر طرفدار دارن ارزش استفاده میکنن (مثل اینستاگرام ، کافه‌بازار و … ) گفتم شاید بد نباشه که درباره‌اش بنویسم .

چیزهایی که باید برای استفاده از Bottom navigation رعایت کنیم :
۱. تعداد تب‌های نمایش داده شده باید بین ۳ تا ۵ تب‌ باشه ، در صورتی احساس میکنید که کمتر یا بیشتر از این مقدار تب خواهید داشت بهتره سراغ این مدل نرید .
۲. برخلاف تب‌های معمول‌ ( بالای صفحه ) در این مدل نباید امکان scroll کردن ما بین تب‌ها وجود داشته باشه .
۳. همینطور برخلاف شیوه قدیمی نباید امکان تغییر بین تب‌ها بدون کلیک روی اونها (کشیدن انگشت به طرفین رو ) داشته باشیم .
۴. متن‌های استفاده شده در هر تب باید تا حد امکان کوتاه باشند ، همچنین استفاه از متن‌های چند خطی به هیچ وجه توصیعه نمیشه   .
۵. رنگ متن و ایکون‌های تب‌های مختلف نباید متفاوت باشن و فقط لازمه زنگ تب انتخاب شده تغییر کنه .
۶. اندازه‌ ایکون‌های استفاده شده باید ۲۴ در ۲۴ dp باشد .
موارد بالا خلاصه‌ای از مهم‌ترین موارد ذکر شده در صفحه مربوط به Bottom navigation بود . میتونید لیست کامل اون‌ها رو در اینجا بخونید .

چطور Bottom navigation رو توی پروژمون استفاده کنیم :
خب با توجه به اینکه توی نسخه‌های ‌کتابخونه‌های support گوگل فعلا خبری از پیاده‌‌سازی این مدل نیست ، یا باید خودمون این مدل رو پیاده‌سازی کنیم ، یا بگردیم دنبال کتابخونه‌هایی که آدم‌های باحال نوشتن و منتشر کردن . از اونجایی که توی این جور کارا این آدم‌های باحال همیشه فعال هستند بعد یه سرچ کوچیک میتونید چندتا کتابخونه برای پیاده کردن این مدل پیدا کنید . دو تا از بهترین کتابخونه‌ها برای انجام این کار AHBottomNavigation و BottomBar هستند که توضیحات و نحوه استفاده از هر کدومشون رو میتونید داخل صفحه گیت‌هابشون بخونید .
تو پست بعدی یه مثال از نحوه پیاده‌سازی Bottom navigation  با استفاده از کتابخونه AHBottomNavigation خواهم نوشت .

معرفی Snackbar در متریال دیزاین

استاندارد

Untitled

یکی از component های جالب و سبکی که گوگل توی متریال دیزان معرفیش کرد Snackbar بود . این component رو احتمالا توی اپ‌های خود گوگل مثل gmail و inbox  دیدید .
Snackbar دقیقا مثل Toast عمل میکنه ، با این تفاوت که به کاربر امکان انجام عملیات در داخل خودش رو میده ، مثلا اینکه درخواستی که توی پیام اومده رو رد یا قبول کنه .

در ادامه چگونگی ساخت snackbar رو برسی میکنیم .
برای قدم اول، فایل build.gradle پروژتون رو باز کنید و کد زیر رو بهش اضافه کنید .

کد زیر Snackbar ای میسازه که فقط یک متن رو نمایش میده .

sddsd تابع make سه پارامتر به عنوان ورودی میگیره ، پارامتر اول view پدر در layoutمونه که قراره توی اون Snackbar رو نمایش بدیم ، پارامتر دوم متنی هست که میخوایم نمایش بدیم و سومین پارامتر ،مدت زمانی هست که قراره snackbar به کاربرانمون نشون داده بشه .

نکته : برای پارامتر سوم بایستی از یکی از مقادیر LENGTH_SHORT, LENGTH_LONG  یا LENGTH_INDEFINITE استفاده کنیم و درصورتی که از LENGTH_INDEFINITE استفاده کنیم snackbar تا زمانی که به وسیله کشیدن از صفحه خارج نشه ، نشون داده خواهد شد .
نکته : در مستندات گوگل توصیه شده که برای view اصلی (پدر) که قراره snackbar در اون نمایش داده بشه  و به عنوان پارامتر اول به تابع make ارسال بشه از CoordinatorLayout استفاده کنید ، تا تمام قابلیت‌های پیش فرض snackbar مثل کشیدن برای از بین بردن ( swipe dissmiss ) و خارج شدن اتوماتیک از کنار صفحه قابل استفاده باشه .

خب حالا فرض کنید به وسیله snackbar میخوایم از کاربرامون یک تاییدیه بگیریم.

توی بالا با استفاده از تابع setAction یک عملیات رو برای snackbar مون تعیرف میکنیم . تابع setAction دوتا ورودی میگیره ، اولی اسمی هست که میخوایم برای عملیاتمون نمایش بدیم و دومی یک onClickListener .
و در آخر اگه بخوایم رنگ متن‌های نمایش داده شده رو تغییر بدیم میتونیم از کد زیر استفاده کنیم .

sdsdsds