کتابخانه‌ای برای ایجاد المان Spinner با قابلیت جستجو - داستان ایجاد یک کتابخانه

برای یک برنامه اندروید نیاز داشتم که لیستی از آیتم‌ها رو نمایش بدم و یکی رو انتخاب کنم. برای اینکار در اندروید المانی به نام Spinner وجود داره. هر کسی باهاش کار کرده باشه می‌دونه که به غایت افتضاحه. این همه گوگل برای المان‌های مختلف آپدیت داده اما این یکی هنوز دست نخورده مونده. چند نفری روی راست به چپ کردن و اضافه کردن برخی ویژگی بهش کار کردن اما باز جای کار داره. برخی هم فقط در اپ خودشون استفاده کردن و کدش رو ارائه ندادن.

دنبال یک Spinner گشتم که امکان جستجو داشته باشه راست به چپ هم باشه. این کتابخانه رو پیدا کردم:

https://github.com/michaelprimez/searchablespinner

اولین چیزی که بهش دقت کردم minSDK اون بود که متاسفانه ۲۱ است. در بخش issue اون پیشنهاد دادن که از کتابخانه‌ی دیگه‌ای برای نمایش انیمیشن استفاده کنه که نسخه اون رو بتونن کاهش بدن. چیزی که استفاده کرده بود در نسخه ۲۱ اندروید اضافه شده. نه راست به چپ بود و نه از تغییر فونت هم پشتیبانی می‌کرد.

در بخش pull request شخصی سعی کرده بود اون رو تا نسخه ۱۵ کاهش بده که خب گویا موفق نبوده. کتابخانه رو گرفتم و برای اضافه کردن فونت، راست به چپ کردن و کاهش minSDK اون سعی خودم رو کردم. هم در attrs و هم در توابع SearchableSpinner امکان استفاده از فونت رو اضافه کردم و همچنین کل UI اون رو راست به چپ کردم.

با استفاده از اون PR و کتابخانه CircularReveal و تغییراتی که اعمال کرده بود تونستم برنامه رو روی اندروید ۱۹ اجرا کنم و minSDK رو تا ۱۷ کاهش بدم. مشکلی نداشت. نسخه اولیه‌ای ازش خروجی گرفتم و حتی در یک برنامه قدیمی هم ازش استفاده کردم.

برنامه رو در اندروید ۲۴ تست کرده بودن و با force close مواجه شده بودن. خطایی که داده بود مربوط میشه به تغییراتِ ترتیبِ نمایش view در صفحه. از نسخه ۲۱ به بعد گویا اینکار با تاخیر انجام میشه و زمانی که هنوز view اصطلاحا به صفحه attach نشده بود قصد داشت انیمیشن رو به اون اختصاص بده. با استفاده از تابع post که جزو توابع عمومی هر view است زمان اتمامِ ایجاد و attach شدن view به صفحه رو تشخیص و بعد از اون انیمیشن رو به اون اختصاص دادم. احتمالا همین مشکل بوده که باعث شده اون PR برای کاهش نسخه اندروید به سرانجام نرسه.

کتابخانه رو در گیت‌هاب منتشر کردم. احساس می‌کنم مشکلاتی باید داشته باشه. در بهبودش کمک کنید.

https://github.com/bkhezry/PersianSearchableSpinner