Skip to content

Latest commit

 

History

History
344 lines (265 loc) · 9.43 KB

File metadata and controls

344 lines (265 loc) · 9.43 KB

Customizable Date Picker

Latest version: 1.2

This is a fully customizable date picker component for Android that offers a variety of customization options and a simple API for displaying a date picker with a wide range of features.

Please note that this library requires Java Version 11 at the least, and

minSdk = 28  //or above

Project Logo

Features

  • Custom Date Highlighting: Highlight specific dates with custom backgrounds or text colors.
  • Customizable UI: Customize buttons, calendar layout, top bar, and date view appearance.
  • Flexible Date Range: Set custom date ranges and enable/disable dates.
  • Simple to Use: Easy-to-use API for showing the date picker and handling date selection.
  • Gesture Month Switching: Option to enable swipe gestures for month navigation.

Installation

To include the Customizable Date Picker in your project, follow the instructions below.

dependencies {
    implementation 'com.github.styropyr0:CustomizableDatePicker:1.1'
}

or for app:build.gradle.kts

dependencies {
    implementation("com.github.styropyr0:CustomizableDatePicker:1.1")
}

Add the following to your settings.gradle:

dependencyResolutionManagement {
    repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
    repositories {
        mavenCentral()
        maven { url 'https://jitpack.io' }
    }
}

or for settings.gradle.kts

dependencyResolutionManagement {
		repositoriesMode.set(RepositoriesMode.FAIL_ON_PROJECT_REPOS)
		repositories {
			mavenCentral()
			maven { url = uri("https://jitpack.io") }
		}
	}

Customization Options

The CustomCalendarResources singleton provides a variety of methods for customizing the appearance and behavior of the date picker. Below is a comprehensive list of available options.


Date Picker Title

  • Set Title Text
    Define the title text for the date picker.

    CustomCalendarResources.setTitle("Select a Date")
  • Set Title Font Size
    Adjust the font size of the title text.

    CustomCalendarResources.setTitleFontSize(16f)
  • Set Title Text Color
    Change the color of the title text.

    CustomCalendarResources.setTitleColor(Color.BLACK)
  • Set Title Visibility
    Show or hide the title in the date picker.

    CustomCalendarResources.setTitleVisibility(View.VISIBLE)

Drawer Customization

  • Set Drawer Color
    Customize the color of the drawer.

    CustomCalendarResources.setDrawerColor(Color.parseColor("#C3DBD3D2"))
  • Set Drawer Visibility
    Show or hide the drawer.

    CustomCalendarResources.setDrawerVisibility(View.VISIBLE)

Top Bar Customization

  • Top Bar Background Color
    Customize the background color of the top bar.

    CustomCalendarResources.setTopBarBackgroundColor(Color.WHITE)
  • Sunday Day Color in Top Bar
    Define the color for Sundays in the top bar.

    CustomCalendarResources.setTopBarSundayColor(Color.RED)
  • Default Day Color in Top Bar
    Specify the default color for other weekdays in the top bar.

    CustomCalendarResources.setTopBarDefaultDayColor(Color.parseColor("#848487"))
  • Top Bar Days Background
    Set a background drawable for the top bar days.

    CustomCalendarResources.setTopBarDaysBackground(R.drawable.days_background)

Calendar Customization

  • Set Highlight Date Background
    Set the drawable for highlighting selected dates.

    CustomCalendarResources.setCalendarDayHighlightBackground(R.drawable.highlight_background)
  • Set Default Date Background
    Define the default background for calendar dates.

    CustomCalendarResources.setCalendarDayBackgroundDefault(R.drawable.default_background)
  • Set Calendar Days Text Color
    Change the text color for all calendar dates.

    CustomCalendarResources.setCalendarDaysTextColor(Color.BLACK)
  • Set Disabled Days Text Color
    Customize the text color for disabled dates.

    CustomCalendarResources.setCalendarDaysDisabledTextColor(Color.GRAY)
  • Set Highlighted Days Text Color
    Specify the text color for highlighted dates.

    CustomCalendarResources.setCalendarDaysHighlightTextColor(Color.RED)
  • Set Calendar Background Color
    Adjust the background color of the calendar.

    CustomCalendarResources.setCalendarBackgroundColor(Color.WHITE)
  • Set Font
    Change the font for all calendar text.

    CustomCalendarResources.setFont(R.font.dm_sans_medium)

Buttons

  • Button Background Drawable
    Set a custom drawable for the buttons.

    CustomCalendarResources.setButtonDrawable(R.drawable.button_background)
  • Button Text Color
    Change the color of the button text.

    CustomCalendarResources.setButtonTextColor(Color.WHITE)
  • Button Font Size
    Adjust the font size of the button text.

    CustomCalendarResources.setButtonFontSize(14f)

Selectors

  • Set Selector Background
    Define the background drawable for the selectors.

    CustomCalendarResources.setSelectorBackground(R.drawable.selector_background)
  • Set Selector Text Color
    Change the text color for the selectors.

    CustomCalendarResources.setSelectorTextColor(Color.BLACK)
  • Selector Font Size
    Adjust the font size for selectors (month/year).

    CustomCalendarResources.setSelectorFontSize(16f)

Gestures and Navigation

  • Enable Gesture-based Month Switching
    Toggle gestures for switching months.

    CustomCalendarResources.useGestureForSwitchingMonths(true)
  • Month Switch Icons (Left and Right)
    Change the icons for navigating months.

    CustomCalendarResources.setMonthSwitchIconLeft(R.drawable.ic_arrow_left)
    CustomCalendarResources.setMonthSwitchIconRight(R.drawable.ic_arrow_right)
  • Year Switch Icon
    Set the icon for switching years.

    CustomCalendarResources.setYearSwitchIcon(R.drawable.ic_arrow_down)

Popup Customization

  • Popup Background
    Customize the background of popups.
    CustomCalendarResources.setPopupBackground(R.drawable.popup_background)

Font Sizes

  • Calendar Font Size
    Adjust the font size for calendar text.

    CustomCalendarResources.setCalendarFontSize(14f)
  • Year Dropdown Font Size
    Customize the font size for the year dropdown menu.

    CustomCalendarResources.setYearDropdownFontSize(12f)

The show() Method

The show() method is used to display the date picker with full flexibility. Here's a detailed breakdown of the parameters:

fun show(
    context: Context,
    date: String,
    displayView: View? = null, 
    offset: String = "0-0-0",
    upperLimit: String = today(), 
    weekSelection: Boolean = false, 
    dateSelectListener: OnDateSelectListener
)

Parameters:

  • context: The Context in which the date picker will be displayed (usually Activity or Fragment).
  • date: The date to show initially, in the format dd-MM-yyyy.
  • displayView: A TextView or Button whose text will be updated with the selected date. If not provided, no view will be updated.
  • offset: A string that defines the offset for date selection. The format is "dd-mm-yyyy". For example, "0-0-5" will show dates from 5 years ago.
  • upperLimit: The latest date a user can select, in the format dd-MM-yyyy. By default, this is today's date.
  • weekSelection: If true, the date picker will show in week selection mode.
  • dateSelectListener: A OnDateSelectListener that will be executed when a date is selected.

Example:

val datePicker = CustomizableDatePicker()
datePicker.show(
    this,
    "20-10-2023", // Default date
    v as Button, // Button to display the selected date
    offset = "0-0-5", // Show dates from 5 years ago
    upperLimit = "31-12-2025" // Limit to dates up to 31st December 2025
) {
    // Code to run after date selection
}

DateManager Class

The DateManager class provides utility functions for managing and formatting dates.

Key Methods:

  • today(): Returns today's date in dd-MM-yyyy format.

    val currentDate = DateManager.today() // "21-11-2024"
  • formatDate(date: String, currentFormat: String, finalFormat: String): Formats a given date from one format to another.

    val formattedDate = DateManager.formatDate("21-11-2024", "dd-MM-yyyy", "yyyy/MM/dd")

Conclusion

The Customizable Date Picker provides a highly customizable and easy-to-use date picker for Android applications. With flexible options for appearance and behavior, you can tailor the date picker to match your app's design requirements. The integration of gesture-based month switching and an offset for date ranges makes it a versatile solution for various use cases.

License

This project is licensed under the MIT License. See the LICENSE file for details.