Giter Club home page Giter Club logo

persian-date-picker-dialog's Introduction

Persian Date Picker Dialog

Hero Image

Persian Date Picker Dialog

This library provides you a beautiful Persian Date picker dialog with easy API.

Usages

Use this dependency in your build.gradle file to reference this library in your project

Step 1. Add the JitPack repository to your build file. Add it in your root build.gradle at the end of repositories:

allprojects {
        repositories {
            ...
            maven { url "https://jitpack.io" }
        }
    }

Step 2. Add the dependency

dependencies {
    implementation 'com.github.aliab:Persian-Date-Picker-Dialog:1.8.0'
}

Then in your Java Code, you use it like below.

 picker = new PersianDatePickerDialog(this)
                .setPositiveButtonString("باشه")
                .setNegativeButton("بیخیال")
                .setTodayButton("امروز")
                .setTodayButtonVisible(true)
                .setMinYear(1300)
                .setMaxYear(PersianDatePickerDialog.THIS_YEAR)
                .setMaxMonth(PersianDatePickerDialog.THIS_MONTH)
                .setMaxDay(PersianDatePickerDialog.THIS_DAY)
                .setInitDate(1370, 3, 13)
                .setActionTextColor(Color.GRAY)
                .setTypeFace(typeface)
                .setTitleType(PersianDatePickerDialog.WEEKDAY_DAY_MONTH_YEAR)
                .setShowInBottomSheet(true)
                .setListener(new PersianPickerListener() {
                    @Override
                    public void onDateSelected(@NotNull PersianPickerDate persianPickerDate) {
                        Log.d(TAG, "onDateSelected: " + persianPickerDate.getTimestamp());//675930448000
                        Log.d(TAG, "onDateSelected: " + persianPickerDate.getGregorianDate());//Mon Jun 03 10:57:28 GMT+04:30 1991
                        Log.d(TAG, "onDateSelected: " + persianPickerDate.getPersianLongDate());// دوشنبه  13  خرداد  1370
                        Log.d(TAG, "onDateSelected: " + persianPickerDate.getPersianMonthName());//خرداد
                        Log.d(TAG, "onDateSelected: " + PersianCalendarUtils.isPersianLeapYear(persianPickerDate.getPersianYear()));//true
                        Toast.makeText(context, persianPickerDate.getPersianYear() + "/" + persianPickerDate.getPersianMonth() + "/" + persianPickerDate.getPersianDay(), Toast.LENGTH_SHORT).show();
                    }

                    @Override
                    public void onDismissed() {

                    }
                });

        picker.show();

Public Methods

Name Description
setMaxYear(int) set maximum year can be selected
setMaxMonth(int) set maximum month can be selected
setMaxDay(int) set maximum day can be selected in the last month
setMinYear(int) set minimum year can be selected
setTypeFace(TypeFace) set dialog typeface
setInitDate(PersianCalendar) set date that dialog will launch on that
setInitDate(PersianCalendar,boolean) set date that dialog will launch on that and force min/max year to be compatible with it
setPositiveButtonString(String) set positive button text
setPositiveButtonResource(@StringRes int) set positive button text from strings.xml
setNegativeButton(String) set negative button text
setNegativeButtonResource(@StringRes int) set negative button text from strings.xml
setTodayButton(String) set today button text
setTodayButtonResource(@StringRes int) set today button text from strings.xml
setTodayButtonVisible(boolean) set today button visible/invisible
setActionTextColor(@ColorInt int) set dialog buttons texts color
setActionTextColorResource(@ColorRes int) set dialog buttons texts color form colors.xml
setCancelable(boolean) set dialog cancelable or not
setBackgroundColor(@ColorInt int) set dialog background color
setPickerBackgroundColor(@ColorInt int) set date pickers background color
setTitleType(NO_TITLE/DAY_MONTH_YEAR/WEEKDAY_DAY_MONTH_YEAR) It will handle title show scenarios
setPickerBackgroundDrawable(@DrawableRes int) set date pickers background drawable from res/drawable folder
setAllButtonsTextSize(int) set Action button text size
setShowInBottomSheet(bool) switch between dialog and bottomsheet
setListener(Listener) set dialog callback listener

STYLING

If you want to change picker text color or divider color you can set it via an easy style in your base application Theme, add

 <style name="AppTheme" parent="Theme.AppCompat.Light.DarkActionBar">
        <!-- Customize your theme here. -->
        <item name="colorPrimary">@color/colorPrimary</item>
        <item name="colorPrimaryDark">@color/colorPrimaryDark</item>
        <item name="colorAccent">@color/colorAccent</item>
         
         <!-- Refrence your picker theme here -->
        <item name="numberPickerTheme">@style/customNumberPicker</item>
 </style>

 <!-- Here is your custom date picker theme -->
 <style name="customNumberPicker">
        <!-- use this for text color -->
        <item name="android:textColorPrimary">@android:color/holo_green_dark</item>
         
        <!-- use this for divider color -->
        <item name="colorControlNormal">@android:color/holo_purple</item>
 </style>

CREDITS

License

   
The MIT License (MIT)

Copyright (c) 2021 Ali Abdolahi

Permission is hereby granted, free of charge, to any person obtaining a copy
of this software and associated documentation files (the "Software"), to deal
in the Software without restriction, including without limitation the rights
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
copies of the Software, and to permit persons to whom the Software is
furnished to do so, subject to the following conditions:

The above copyright notice and this permission notice shall be included in all
copies or substantial portions of the Software.

THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
SOFTWARE.

persian-date-picker-dialog's People

Contributors

aliab avatar bkhezry avatar hamedgramzi avatar hoss3inf avatar mahdihs76 avatar naserkhoshfetrat avatar shznaqvi avatar squti avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

persian-date-picker-dialog's Issues

خطای FATAL EXCEPTION: main java.lang.NullPointerException

E/AndroidRuntime: FATAL EXCEPTION: main
                                                                   java.lang.NullPointerException
                                                                       at java.util.GregorianCalendar.computeFields(GregorianCalendar.java:689)
                                                                       at java.util.Calendar.complete(Calendar.java:839)
                                                                       at java.util.Calendar.get(Calendar.java:901)
                                                                       at ir.hamsaa.persiandatepicker.util.PersianCalendar.calculatePersianDate(PersianCalendar.java:162)
                                                                       at ir.hamsaa.persiandatepicker.util.PersianCalendar.setTimeZone(PersianCalendar.java:380)
                                                                       at java.util.Calendar.<init>(Calendar.java:711)
                                                                       at java.util.Calendar.<init>(Calendar.java:723)
                                                                       at java.util.GregorianCalendar.<init>(GregorianCalendar.java:338)
                                                                       at ir.hamsaa.persiandatepicker.util.PersianCalendar.<init>(PersianCalendar.java:154)
                                                                       at ir.hamsaa.persiandatepicker.PersianDatePickerDialog.show(PersianDatePickerDialog.java:120)
                                                                       at com.milimilad.panbe.OrderActivity.showMyDialog(OrderActivity.java:594)
                                                                       at com.milimilad.panbe.OrderActivity$12.onClick(OrderActivity.java:404)
                                                                       at android.view.View.performClick(View.java:4084)
                                                                       at android.view.View$PerformClick.run(View.java:16966)
                                                                       at android.os.Handler.handleCallback(Handler.java:615)
                                                                       at android.os.Handler.dispatchMessage(Handler.java:92)
                                                                       at android.os.Looper.loop(Looper.java:137)
                                                                       at android.app.ActivityThread.main(ActivityThread.java:4745)
                                                                       at java.lang.reflect.Method.invokeNative(Native Method)
                                                                       at java.lang.reflect.Method.invoke(Method.java:511)
                                                                       at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:786)
                                                                       at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:553)
                                                                       at dalvik.system.NativeStart.main(Native Method)

سلام مشکل چیه؟ اندروید 5 به پایین کرش میشه برنامه! این از کدهامه:

persianDatePickerDialog = new PersianDatePickerDialog(OrderActivity.this)
                    .setPositiveButtonString("تایید")
                    .setNegativeButton("لفو")
                    .setTodayButton("برو به امروز")
                    .setTodayButtonVisible(true)
                    .setMaxYear(1450)
                    .setMinYear(persianDate.getShYear())
                    .setActionTextColor(getResources().getColor(R.color.textSecondary))
                    .setListener(new Listener() {
                        @Override
                        public void onDateSelected(PersianCalendar persianCalendar) {
                                    editText.setText(persianCalendar.getPersianYear() + "/" + persianCalendar.getPersianMonth() + "/" + persianCalendar.getPersianDay());
                        }

                        @Override
                        public void onDismissed() {
                        }
                    });
            persianDatePickerDialog.show();

خط persianDatePickerDialog.show(); رو ارور میگیره

تبدیل تاریخ دریافتی به رشته

سلام دوست عزیز ممنون بابت این کتابخانه کاربردی . در تلاشم تاریخ دریافتی را به string تبدیل کنم.
آیا این قابلیت فعال هست ؟ چطور باید تاریخ گرفته شده را به فرمت yyyy-mm-dd تبدیل کنیم؟
باتشکر

نحوه استفاده در پروژه جدید

سلام دوست عزیز
شاید سوال من خیلی ارتباط به موضوع نداشته باشه.جون من تقریباً تازه کار هستم.
.لطفاً اگه ممکنه دقیق تر توضیح بدید چطور از لایبرری شما در یه پروژه استفاده کنم
طبق توضیحات شما و چندین روش مختلف انجام دادم اما نتونستم
بعد از اضافه کردن لایبری شما به پروژه اندروید استودیو خودم دارای 3 تا فایل
Build.gradle
میشه. کدهای شمارو به کدوم اضافه کنم؟

تنظیم محدودیت روی روز

سلام ممنون بابت لایبری خوبتون.
میخوام محدودیت بگذارم روی روز های دیالوگ، بصورتی که از امروز تا 14 روز آینده بیشتر قابل انتخاب نباشه، مشکل اینجاست اگر آخر ماه باشی باید آیتم ماه رو هم هندل کنی.
ممنون میشم در این خصوص راهنمایی کنید.

تغییر رنگ عنوان تاریخ

سلام
چطوری میشه رنگ تاریخی که بالای دیالوگ نمایش میده رو عوض کرد
مثلا مینویسه
یکشنبه 18 فروردین 1398

changeDividerColor

برای تغییر رنگ آبی جدا کننده چه باید کرد؟

Date Limit

Is there any way to set min max date limit instead of only year?
For example I only want user to be able to select 1st to 15th of the current month

تغییر رنگ بک گراند دیالوگ

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

ممنون میشم راهنمایی کنید.

NullpointerException

initDate = new PersianCalendar();
picker.show();
one of these two lines give nullpointerExceptions...
i have read all about nullpointerExceptions and read all your class
and i did use try/catch and catched exception directly from these 2
still i cant find right solution

"مشکل در "برو به امروز

تو 31 مرداد، وقتی میزدم "برو به امروز" میرفت رو 29 مرداد
الان که 1 شهریور هستیم، اون دکمه رو میزنم درست عمل میکنه
فکر کنم 30 و 31 رو درست عمل نمیکنه

getting THIS_YEAR not working!

Hi, thanks to your library I've solved lots of solutions in my project! but there's a small problem in your library or maybe in my project! When I'm trying to get Current Year as the min year it didn't worked! I used Toast to see what it return and i get -1! here is my code:

new PersianDatePickerDialog(OrderActivity.this)
.setPositiveButtonString("تایید")
.setNegativeButton("لفو")
.setTodayButton("برو به امروز")
.setTodayButtonVisible(true)
.setMinYear(PersianDatePickerDialog.THIS_YEAR)
.setActionTextColor(getResources().getColor(R.color.textSecondary)));
persianDatePickerDialog.show();

اضافه نشدن پکیج

سلام من هر کاری کردم نتونستم پکیج رو از طریق گردل به برنامه اضافه کنم

null pointer exception

PersianCalendar initDate = new PersianCalendar();
تو این خط خطای
nullPointerException
میده تو اندروید
api16

Wrong Method Name in Github Wiki

Please change the method name "onDismissed" to "onDismised" in the github wiki Page , probably you type it wrong in the wiki and use another name in Library , tnx for your Library anyway , good luck

ارور تگ در متد OnDateSelected

سلام وقت بخیر بنده تازه شروع به برنامه نویسی کردم و تازه کارم و از کتاب خانه شما که استفاده میکنم میخوام اون رو به صورت یک متد بکنم و با زده شدن دکمه تاریخ اون رو فراخانی کنم اما TAG ها ارور میدن
Uploading Screenshot (58).png…

initdate not working

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

مثلا به این صورت تاریخ 1398/9/5 رو ست میکنم:

final PersianCalendar initDate = new PersianCalendar();
initDate.setPersianDate(1398,9,5);

final PersianDatePickerDialog picker = new PersianDatePickerDialog(ActivityPerson.this)
.setPositiveButtonString("ok")
.setNegativeButton("dismiss")
.setTodayButton("today")
.setTodayButtonVisible(true)
.setInitDate(initDate)
.setMinYear(1300)
.setActionTextColor(getResources().getColor(R.color.colorPrimaryDark))
.setListener(new Listener() {...});

picker.show();

من تا نسخه ی زیر یعنی:
implementation 'com.github.hamsaadev:Persian-Date-Picker-Dialog:V1.2'
این مشکلی که گفتم رو نداشتم ولی بعد از اون نسخه همشون این مشکل رو دارن

سپاس از توجه شما.

RTL/LTR and AndroidX issues

Dialog layout direction is wrong when local is "fa" (Year at right side, Day at left side) and in next release please migrate it to AndroidX.

custom theme not working

styles.xml:

    <style name="AppTheme" parent="Theme.MaterialComponents.Light.NoActionBar">
         ...
        <item name="numberPickerTheme">@style/numberPickerTheme</item>
    </style>
    <style name="numberPickerTheme" parent="AppTheme">
        <item name="android:textColorPrimary">#444</item>
        <item name="colorControlNormal">#222</item>
    </style>

tested on android Nexus 5 Lollipop

to Milliseconds?

سلام
چطور میشه تاریخ انتخابی توسط کاربر رو به
millisecond
تبدیل کرد؟

Button Directions

سلام

بنظرم یه گزینه ای باشه که بشه دکمه ها رو از سمت چپ به سمت راست آورد خیلی خوب میشه

wrong conversion of current date

Hi,
today is 30th Mehr 1397 (1397/7/30) but when I click "today" button it goes to 29 Mehr 1397 (1397/7/29)
it seems the conversion of Gregorian to Persian Calendar has logical error in calculation

azar return value is not correct

in PersianCalendar.java :

private String formatToMilitary(int i) {
return (i < 9) ? "0" + i : String.valueOf(i);
}

this line :
return (i < 9) ? "0" + i : String.valueOf(i);

change to :
return (i <= 9) ? "0" + i : String.valueOf(i);

timestamp

سلام
امکان تبدیل تایم‌ استمپ به تاریخ و تبدیل تاریخ به تایم‌ استمپ هم تو این پروژه هست؟
تشکر

مقایسه دو ابجکت تقویم

سلام. ممنون بابت این لایبراری
دو تا دیت پیکر دارم یکی واسه دیت استارت کار. یکی واسه پایان.وقتی که ست شدند و کاربر نکست زد میخوام یه تابع چک بنویسم که اختلافشون از 24 ساعت بیشتر نباشه.

از کدوم متد کلاس میتونم کمک بگیرم؟
یا اینکه دستی با کلی ایف بنویسم .
ممنون

Bug in getPersianShortDateTime()

Dear Ali,
Hi.
A bug exist in getPersianShortDateTime() method !
when select day (9) For Example : 1397/08/09 this method returned : 1397/08/9
that is wrong.
i think this method has problem 👍
private String formatToMilitary(int i) {
return i < 9 ? "0" + i : String.valueOf(i);
}

سال 1399 به بعد رد تقویم نیست

سال 99 ببعد به تقویم افزوده خواهد شد؟ چون ما میخوایم اپلیکیشن رو در شروع سال جدید ارائه کنیم اگر افزوده نخواهد شددنبال ویجت دیگری باشیم لطفا پاسخ بدین ممنون

مشکل عجیب در تبدیل تاریخ

سلام. در موردی عجیب وقتی تاریخ ها رو توی روز ۳۰ آخرین ماه 2018 تبدیل به فارسی می کردی نتایج اشتباها این میشد:
31dec2018
اما در اولین روز اولین ماه 2019 این میشه
1jan-2019

Wrong day on day wheel

Hi, thanks for great library. if i use today button the day wheel show today as well. but when the datepicker start the current day wheel show one day before actual day. (tested at 01:57 am)
the day on wheel is one day before but actual header is ok.
again thanks for making this lib.

ERROR: Failed to resolve: coordinatorlayout

بعد از آپدیت به ورژن 1.5.1 از 1.5.0 گریدل بیلد نمیشود و این ارور رو میدهد
ERROR: Failed to resolve: coordinatorlayout
Affected Modules: app

حداقل تاریخ

تعجب میکنم چرا تو توضیحات ننوشتید که تاریخ ها مابین چیا باید باشه. یعنی کسی که سال مثلا ۷۰ به دنیااومده باشه امکان پذیر نیست؟ حداقل توضیح بدید.

این خیلی تغییرات میخاد قابل استفاده باشه. کاربردی نداره به صورت استفاده عادی

اصلاح فرمت تاریخ ها

سلام دوست عزیز
تاریخ ها برای اعداد تک رقمی باید با صفر همراه باشه مثل:
1396/09/06
نه
1396/9/6
اگر ممکنه اصلاح بفرمایید، دوستان به مشکل بر میخورن
با تشکر از زحمات شما

راست چین کردن دیالوگ

سلام
چه جوری میشه دیالوگ رو راست چین کرد
واسه من سال ست راست میاد
می خوام روز سمت راست بیاد
مثل عکسی که گذاشتی

مشکل در تاریخ برو به امروز

با سلام خدمت بزرگواران
بابت کتابخانه ی شیک و کارایی شما نهایت تشکر و داریم
امروز 31 تیر هست
اما برو به امروز متاسفانه 29 رو نمایش میده
لطفا و خواهشا این باگ رو برطرف کنید
ممنونیم از شما

wrong result on "today" click

Hi,
today is 1397/7/30 when I click on today button the dialog will set to 1397/7/29
but I tested PersianCalendar class and test passed successfully:

@Test
    public void testPersinCalendar(){
        ir.hamsaa.persiandatepicker.util.PersianCalendar persianCal = new ir.hamsaa.persiandatepicker.util.PersianCalendar();
        persianCal.set(2018, Calendar.OCTOBER, 22);
        assertEquals(persianCal.getPersianShortDate(),"1397/07/30");
    }

conflict with material component

hi, first of all, thank you for your helpful library. I can use it in a simple project. the problem is that when I have a material component, my Gradle will sync but I can't run it. I use androidX and the material component which I use is :

implementation 'com.google.android.material:material:1.2.0-alpha01'

and I get the following error :
Could not find fragment.jar (androidx.fragment:fragment:1.1.0). Searched in the following locations: https://dl.google.com/dl/android/maven2/androidx/fragment/fragment/1.1.0/fragment-1.1.0.jar

how can I fix this issue?!

Design in DialogFragment

سلام
من وقتی از این تقویم توی اکتیویتی استفاده میکنم همه چی خوبه اما وقتی توی دیالوگ فرگمنت تابع رو صدا میزنم دیزاین به هم میریزه. تصویرش هم اینه:
نمایش تصویر

راهی هست که حداقل ارتفاعشو بیشتر کنم که دکمه ها پیدا باشن؟

بسته شدن دیالوگ

با سلام لطفا خصوصیت دیالوگ خود اندروید ()setCancelable را اضافه کنید. اینجا گفتم چون یه جورایی ایراد هست وقتی بعضی مواقع نیاز هست پنجره بسته نشود

پیشنهاد توسعه

سلام پیشنهادی دارم برای افزودن قابلیت نمایش مناسبت به برنامه ای که توسعه دادید

الان که همه ی سیستم ها به اینترنت متصل هستند پیشنهاد میکنم ارتباط با ای پی آي های تقویم رو هم در این سورس خوب پیاده سازی کنید
خودم از این سرویس زیاد استفاده میکنم


وب سرویس تقویم فارسی

اطلاعات خوبی ارائه میده مثل وقایع و مناسبت های هر روز و دریافت رویداد در حالت شمسی و قمری و میلادی

مخفی کردن فیلد انتخاب روز

سلام و روز بخیر
من میخوام فقط سال و ماه رو به کاربر نمایش بدم
آیا امکان پنهان کردن فیلد انتخاب روز وجود داره؟

تاریخ امروز اشتباه

سلام دوست عزیز
کتابخونه ای که نوشتید تاریخ امروز رو به اشتباه یک روز عقب تر میزنه
میشه اصلاح کنید
متشکر

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.