تبلیغات

کتابخانه Persian Material DateTime Picker اندروید – انتخاب تاریخ شمسی

کتابخانه Persian Material DateTime Picker اندروید – انتخاب تاریخ شمسی

کتابخانه Persian Material DateTime Picker اندروید
دیت تایم پیکر شمسی برای اندروید + انتخابگر زمان
تقومی شمسی اندروید


یکی از معظلات اصلی برنامه نویسان ایرانی این است که باید با تاریخ شمسی دست و پنجه نرم کنند! که البته چیز بدی نیست و این گونه موارد برای ایرانیان باعث می‌شود تا با مدیریت پیچدگی‌های بیشتر، توانایی برنامه نویسیشان افزایش یابد 🙂

کتابخانه‌ی PersianMaterialDateTimePicker، یکی از کتابخانه‌های فارسی اندروید می‌باشد که برای کار با تاریخ شمسی نوشته شده است و با استفاده از آن می‌توانید به سادگی دیالوگ انتخاب تاریخ و زمان را به کاربر نمایش داده و سپس مقادیر انتخاب شده توسط کاربر را دریافت کنید.

روش استفاده از کتابخانه

اولین قدم این است که کتابخانه را به پروژه‌ی خود اضافه کنید! شما بهتر است فایل پروژه‌ی این کتابخانه را از انتهای مطلب دانلود کرده و آن را به عنوان یک ماژول به پروژه‌ی خود اضافه کنید تا در صورت نیاز، تغییراتی در آن اعمال کنیدو هم‌چنین، با روند کار آن آشنا شده و به دانش خود بیافزایید! اما می‌توانید از طریق گریدل (Gradle) نیز این کار را انجام دهید:

implementation 'com.mohamadamin:persianmaterialdatetimepicker:1.2.1

کدهای زیر بافرض نوشته شدن در یک اکتیویتی می‌باشند.

نمایش یک تایم پیکر (انتخاب زمان)

برای این‌که به کاربر امکان انتخاب یک زمان (ساعت و دقیقه‌ی) دلخواهش را بدهیم، می‌توانیم از کد زیر استفاده کنیم! البته گرچه برای انتخاب ساعت نیازی به کتابخانه‌ی جانبی نیست، ولی خب این امکان را هم دارد:

PersianCalendar now = new PersianCalendar();
TimePickerDialog tpd = TimePickerDialog.newInstance(
        new TimePickerDialog.OnTimeSetListener() {
          @Override
          public void onTimeSet(RadialPickerLayout view, int hourOfDay, int minute) {
              String hourString   = hourOfDay < 10 ? "0" + hourOfDay : "" + hourOfDay;
              String minuteString = minute < 10 ? "0" + minute : "" + minute;
              String time         = "You picked the following time: " + hourString + ":" + minuteString;
              Toast.makeText(MainActivity.this, time, Toast.LENGTH_LONG).show();
          }
        },
        now.get(PersianCalendar.HOUR_OF_DAY),
        now.get(PersianCalendar.MINUTE),
        true
);
tpd.setThemeDark(false);
tpd.setOnCancelListener(new DialogInterface.OnCancelListener() {
    @Override
    public void onCancel(DialogInterface dialogInterface) {
        Toast.makeText(MainActivity.this, "TimePickerDialog Canceled", Toast.LENGTH_LONG).show();
    }
});
tpd.show(getFragmentManager(), "FuLLKade");

ابتدا یک آبجکت از کلاس PersianCalendar می‌سازیم و اگر هیچ مقداری را برای آن تنظیم نکنیم، تاریخ و زمان حال را نمایش می‌دهد!
سپس یک دیالوگ انتخاب زمان از کلاس TimePickerDialog ای که مربوط به این کتابخانه (نه کتابخانه‌ی خود اندروید) است را با استفاده از متد استایتک newInstance می‌سازیم که به ترتیب ورودی‌های زیر را دریافت می‌کند:

  • ورودی اول:
    رویداد OnTimeSetListener را برای آن تنظیم می‌کنیم که داخل آن زمان انتخاب شده بعد از کلیک کاربر روی دکمه‌ی تایید دیالوگ، ارسال می‌شود.
    داخل متد onTimeSet این رویداد، ساعت و دقیقه را بعد از دریافت شدن بررسی می‌کنیم که اگر مقدارشان کم‌تر 0 بود، یک 0 نیز به سمت چپ آن اضافه شود تا به صورت دو رقمی نمایش داده شود. البته این مورد کاملا دلخواه بوده و اجباری نیست.؛ مگر در شرایطی خاص مثل ارسال DateTime به سمت سرور و ذخیره‌ی آن در دیتابیس که باید حتما دو رقمی باشند.
  • ورودی دوم
    ساعت پیش‌فرض را از آبجکت now می‌گیریم که همان ساعت فعلی سیستم است.
  • ورودی سوم:
    دقیقه‌ی پیش‌فرض را از آبجکت now می‌گیریم که همان دقیقه‌ی فعلی سیستم است.
  • ورودی سوم:
    مشخص می‌کنیم که زمان به صورت 24 ساعتی می‌باشد یا 12 ساعتی! که در کد بالا ما 24 ساعتی را با ارسال true تنظیم کرده‌ایم و بدیهی است که برای 12 ساعتی هم باید false را به داخل آن ارسال کنیم.

متد setThemeDark:
تنظیم تم دیالوگ (مقدار true یعنی تم تاریک و مقدار false یعنی تم پبش‌فرض)


متد setOnCancelListener:
تنظیم رویداد برای زمانی که روی دکمه‌ی لغو دیالوگ کلیک شود.


متد show:
نمایش دیالوگ با استفاده از getFragmentManager
می‌توانید سورس پروژه را ویرایش کرده و DialogFragment را از android.support.v4.app.DialogFragment ایمپورت کنید تا به جای getFragmentManager از getSupportFragmentManager استفاده کنید.
ورودی دوم، “FuLLKade” می‌باشد که به عنوان تگ برای Log های کتابخانه استفاده می‌شود.

نمایش یک انتخاب گر تاریخ

در مورد انتخابگر تاریخ نیز به صورت زیر عمل می‌کنیم:

PersianCalendar now = new PersianCalendar();
DatePickerDialog dpd = DatePickerDialog.newInstance(
        new DatePickerDialog.OnDateSetListener() {
            @Override
            public void onDateSet(DatePickerDialog view, int year, int monthOfYear, int dayOfMonth) {
                Toast.makeText(MainActivity.this, year + "/" + monthOfYear + "/" + dayOfMonth, Toast.LENGTH_LONG).show();
            }
        },
        now.getPersianYear(),
        now.getPersianMonth(),
        now.getPersianDay()
);
dpd.setThemeDark(false);
dpd.show(getFragmentManager(), "FuLLKade");

تمام موارد همانند انتخاب گر زمان است با این تفاوت که در این‌جا از DatePickerDialog استفاده می‌کنیم و در ورودی‌ها نیز رویداد OnDateSetListener و تاریخ پیش‌فرض را تنظیم می‌کنیم.
در نهایت پس از انتخاب تاریخ توسط کاربر و تایید کردن دیالوگ، می‌توانید موارد انتخاب شده را در متد onDateSet رویداد OnDateSetListener مدیریت کنید.

نکته
ظاهرا کتابخانه مقدار ماه را یک رقم کم‌تر برمی‌گرداند؛ که خودتان برای استفاده بایستی آن را با 1 جمع کنید. طبق گفته یکی از دوستان در بخش نظرات، خود کتابخانه‌ی اندروید نیز برای تاریخ میلادی به‌همین صورت عمل می‌کند. این را می‌توان هم یک مشکل دانست و هم یک استاندارد؛ ولی در کل احتمالا دلیل آن به‌خاطر استفاده از ایندکس آرایه‌ای است. می‌توانید با مطالعه‌ی سورس پروژه، آن را خودتان تغییر دهید.

غیرفعال کردن تاریخ های گذشته

با استفاده از متد زیر می‌توانید تاریخ را برای گذشته غیرفعال کنید تا کاربر نتواند تاریخ‌های گذشته را انتخاب کند:

dpd.setMinDate(now);

متد setMinDate برای تنظیم حداقل تاریخ مجاز برای انتخاب استفاده شده و تاریخ‌های ماقبل آن غیرفعال می‌شوند.
با این حساب، متد setMaxDate نیز برای برعکس آن استفاده می‌شود که یعنی حدکاثر تاریخ مجازی که کاربر می‌تواند آن را انتخاب کند و بعتد از این تاریخ، بقیه غیرفعال شده و تنها نمایش داده می‌شوند.

مطالب مرتبط

قطعه کد تبدیل تاریخ شمسی به میلادی و برعکس

باکس دانلود نیم‌بها

  • نسخه فایل 3.1.3
  • پسورد (در صورت نیاز) www.fullkade.com

درباره نویسنده

هادی اکبرزاده

[ مدیر فول کده ]

یه کلاسِ تعریف نشده ... فقط برای ارتباط کاری تلگرام پیام بدید ...

پاسخ دهید

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

نظرات ثبت شده 3 دیدگاه

    1. شیرازی کاربر مهمان گفت:

      سلام ایا در این افزونه میتوان تنها ماه و سال را نمایش‌داد و روز را غیر فعال کرد

      10
    2. newreza کاربر مهمان گفت:

      با سلام.
      این که اشاره کردید شماره ماه را از صفر برمیگرداند و باید به علاوه 1 شود، استاندارد است و مشکل حساب نمیشود.
      کتابخانه پیش فرض اندروید برای تاریخ میلادی (GregorianCalendar) نیز به همین شیوه عمل میکند.
      بنابراین میتوان این قسمت را به عنوان «نکته» بیان کرد؛ نه به عنوان «مشکل»!
      باتشکر.

      00
      1. هادی اکبرزاده مدیر سایت گفت:

        سلام و درود خدمت شما. تشکر از اطلاع رسانیتون. نکته گفته شده به مطلب اضافه شد.

توضیحات دانلود نظرات اشتراک