Recently, i got a requirement to have multiple datepickers in a single form.
So i decided to create a customview for android datepicker
Here is the code for CustomView extended from EditText
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 | package com.pratap.calendarview.views;
import android.app.DatePickerDialog; import android.content.Context; import android.content.DialogInterface; import android.util.AttributeSet; import android.view.Gravity; import android.view.View; import android.widget.DatePicker; import android.widget.EditText;
import java.text.SimpleDateFormat; import java.util.Calendar; import java.util.Date; import java.util.GregorianCalendar;
/** * Date picker widget. * * @author bgamard */ public class DatePickerView extends EditText implements DatePickerDialog.OnDateSetListener {
private Date date;
// private Date previousSelectedDate;
public DatePickerView(Context context, AttributeSet attrs, int defStyle) { super(context, attrs, defStyle); }
public DatePickerView(Context context, AttributeSet attrs) { super(context, attrs); setAttributes(); }
public DatePickerView(Context context) { super(context); setAttributes(); }
private void setAttributes() {
setHint("Select Date"); setGravity(Gravity.LEFT | Gravity.CENTER); setFocusable(false); // setTextSize(18); // setPadding(10, 10, 10, 10);
setOnClickListener(new OnClickListener() { @Override public void onClick(View v) { Calendar calendar = Calendar.getInstance(); if (date != null) { calendar.setTime(date); } DatePickerDialog datePicker = new DatePickerDialog( DatePickerView.this.getContext(), DatePickerView.this, calendar.get(Calendar.YEAR), calendar.get(Calendar.MONTH), calendar.get(Calendar.DAY_OF_MONTH)); datePicker.setCancelable(false);
// datePicker.setCanceledOnTouchOutside(true); datePicker.setButton(DialogInterface.BUTTON_NEGATIVE, "CANCEL", new DialogInterface.OnClickListener() { public void onClick(DialogInterface dialog, int which) { if (which == DialogInterface.BUTTON_NEGATIVE) { dialog.dismiss();
} } });
datePicker.show(); } }); }
@Override public void onDateSet(DatePicker view, int year, int monthOfYear, int dayOfMonth) {
Date date = new GregorianCalendar(year, monthOfYear, dayOfMonth).getTime();
setDate(date); }
public void setDate(Date date) { if (date != null) { this.date = date; SimpleDateFormat newformat = new SimpleDateFormat("yyyy-MM-dd"); String formattedDate = newformat.format(date); setText(formattedDate); } else {
setText(""); } }
public Date getDate() { return date; }
public Calendar getModifiedDate() { Calendar calendar = Calendar.getInstance(); if (date != null) { calendar.setTime(date); } return calendar; } }
|
Use it xml Layout like below
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 | <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical">
<android.support.v7.widget.Toolbar android:id="@+id/toolbar" android:layout_width="match_parent" android:layout_height="?attr/actionBarSize" android:background="?attr/colorPrimary" android:elevation="4dp" android:title="Add New Event" android:titleTextColor="#FFF" android:theme="@style/ThemeOverlay.AppCompat.Dark.ActionBar" app:popupTheme="@style/ThemeOverlay.AppCompat.Light" />
<LinearLayout android:id="@+id/formLayout" android:layout_width="match_parent" android:layout_height="match_parent" android:layout_below="@+id/toolbar" android:layout_margin="16dp" android:layout_weight="1" android:orientation="vertical">
<EditText android:id="@+id/title" android:layout_width="match_parent" android:layout_height="wrap_content" android:fontFamily="sans-serif" android:hint="Enter Title" android:textSize="18sp" />
<com.pratap.calendarview.views.DatePickerView android:id="@+id/startDate" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="start Date" android:fontFamily="sans-serif" android:textSize="18sp" />
<com.pratap.calendarview.views.DatePickerView android:id="@+id/endDate" android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="end Date" android:fontFamily="sans-serif" android:textSize="18sp" />
</LinearLayout>
<Button android:id="@+id/btnSave" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_below="@+id/formLayout" android:backgroundTint="@color/colorPrimary" android:text="Save" android:textColor="#FFF" />
</LinearLayout>
|
Screenshots:
No comments:
Post a Comment