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