یه روز خیلی یهویی تصمیم گرفته شد که به همه برنامههای شرکت یه صفحه اینترو (خوشآمد گویی) اضافه بشه. صفحه اینترو رو احتمالا میدونید چیه. اگه نمیدونید چیه که باید عرض کنم اینه:

یه صفحه که وقتی برنامه برای بار اول اجرا میشه، نمایش داده میشه و به کاربر یه سری اطلاعاتی رو میده. البته این تصویر بالا یه چیز خفنتریه و اینتروی مدنظر ما چیز سادهتری بود. شبیه این:

این که آیا اصلاً این کار خوبه یا نه، توی چه مواردی کاربرد داره و چطور بهتره پیادهسازی شه رو آقای تقیآبادی به زیبایی توی این مقاله گفتند.
چون برنامههای شرکت به زبان فارسی طراحی شده بودن، نیاز بود که این صفحه اینترو هم به صورت راست چین (RTL) پیادهسازی بشه.
برای اینکه یه وقت چرخ رو دوباره نسازیم، شروع کردم به سرچ کردن دنبال اینکه آیا کسی از قبل چنین چیزی ساخته یا نه.
کتابخونه برای ساخت صفحه اینترو به وفور پیدا میشه، منتهی این ویژگی خاص یعنی RTL بودن چیزی بود که من پیداش نکردم. حالا شاید هم باشه.
در نتیجه تصمیم گرفتم که خودم یه کتابخونه بسازم و یه طوری هم بسازم که بشه توی همه پروژهها به آسونی ازش استفاده کرد.
حاصل این تصمیم شد ایشون. (لینک کتابخونه)
یه کتابخونه اینترو که هم صفحات راستچین(RTL) رو پشتیبانی میکنه و هم صفحات چپچین (LTR).

برای توسعه کتابخونه از زبان کاتلین و لایبرری androidx استفاده کردم. یه کم چون تحویل فوری باید میدادم کدش شاید شلوغ پلوغ و غیر بهینه باشه. اگه اصلاحی، چیزی دارید که خوشحال میشم.
توی فایل build.gradle سطح پروژتون، ریپازیتوری جیتپک رو اضافه کنید:
allprojects { repositories { ... maven { url 'https://jitpack.io' } } }
بعد توی فایل build.gradle سطح app، لایبرری رو به دیپندنسیها اضافه کنید:
dependencies { implementation 'com.github.alikhaleghi76:rtl-slider:1.0.6' }
حالا کتابخونه به پروژه اضافه شده و میتونید ازش استفاده کنید.
برای استفاده میتونید ویوی اسلایدر رو این شکلی به layoutتون اضافه کنید:
<ali.khaleghi.rtlintroslider.RTLIntroSlider android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/introSlider" />
و توی سمت جاوا یا کاتلین با کد زیر بهش صفحه اضافه کنید:
RTLIntroSlider introSlider = findViewById(R.id.introSlider); introSlider.addPage( "TITLE1", "DETAIL1", ContextCompat.getColor(this, R.color.intro_text_color1), ContextCompat.getColor(this, R.color.intro_background_color1), R.drawable.icon1 ); introSlider.addPage( "", "DETAIL2", ContextCompat.getColor(this, R.color.intro_text_color2), ContextCompat.getColor(this, R.color.intro_background_color2), -1 );
توی این کتابخونه هم میتونید از صفحات پیشفرض مثل همین کد بالا استفاده کنید که ظاهر بدی هم نداره و شما فقط بهش عنوان و عکس و این چیزا میدید، هم میتونید هر فرگمنتی که دوست داشتید، بهش بدید.
برای اینکه بتونید از همه امکانات کتابخونه استفاده کنید، میتونید این کارارو بکنید.
اول توی فایل xml مربوط به layoutتون و بالاترین لایش، یعنی همون لایه root این خط کدو اضافه کنید:
xmlns:sliderOptions="http://schemas.android.com/apk/res-auto"
بعدش میتونید اینطوری ویو رو کاستوم کنید:
<ali.khaleghi.rtlintroslider.RTLIntroSlider android:layout_width="match_parent" android:layout_height="match_parent" android:id="@+id/introSlider" sliderOptions:next_text="@string/next" sliderOptions:skip_text="@string/skip" sliderOptions:enter_text="@string/enter" sliderOptions:show_indicator="true" sliderOptions:is_rtl="true" sliderOptions:active_dot_color="#CCFFFFFF" sliderOptions:inactive_dot_color="#77FFFFFF" sliderOptions:separator_color="#88FFFFFF" sliderOptions:next_color="#FFFFFF" sliderOptions:skip_color="#FFFFFF" />
فک کنم واضحه هر خط چیکار میکنه.
برای سفارشی کردن از سمت جاوا/کاتلین هم که میتونید اینطوری رفتار کنید:
// to set custom font introSlider.setTypeface(Typeface.createFromAsset(context.getAssets(), "fonts/custom_font.ttf")); // show/hide skip button introSlider.setSkipVisibile(true); // rtl/ltr slider introSlider.setRtl(true); // text of next button introSlider.setNextText("NEXT"); // text of skip button introSlider.setSkipText("SKIP"); // to add custom slider page introSlider.addFragment(new Fragment1()); // show/hide indicator introSlider.setShowIndicator(true); // to add list of custom pages ArrayList<Fragment> fragments = new ArrayList<>(); fragments.add(new Fragment1()); fragments.add(new Fragment2()); introSlider.addFragments(fragments); // observe skip button click introSlider.addOnSkipClickListener(() -> finish());
این اولین کتابخونهای بود که توی زندگیم نوشتم. به خاطر همین حس خوبی داره و گفتم به شما هم معرفیش کنم. اگه برنامهنویس هستید و یا به هر دلیلی صفحه گیتهاب دارید و حال کردید، میتونید یه ستارهای چیزی شاباش بدید!
پینوشت
لعنت به ادیتور ویرگول