- Custom DatePicker Dialog restrict to showing Future dates
- This datepickerdialog has the ability to restrict future date from given max date.Its works in on all api version of android.
- //main.xml
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="fill_parent"
- >
- <Button
- android:text="DatePicker Dialog"
- android:id="@+id/time_btn"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
- <TextView
- android:layout_centerInParent="true"
- android:id="@+id/date_txt"
- android:textStyle="bold"
- android:textSize="25dp"
- android:textColor="#ffffff"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- />
- </RelativeLayout>
- //customdatepickerdialog.xml
- <?xml version="1.0" encoding="utf-8"?>
- <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:paddingBottom="1dp"
- android:background="#ffffff"
- >
- <RelativeLayout
- android:id="@+id/first"
- android:layout_margin="1dp"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="#000000"
- >
- <ImageView
- android:id="@+id/clock"
- android:layout_margin="2dp"
- android:src="@drawable/clock"
- android:layout_width="40dp"
- android:layout_height="40dp"
- />
- <TextView
- android:id="@+id/actualtime"
- android:layout_toRightOf="@+id/clock"
- android:textColor="#ffffff"
- android:text="Sunday, Jan 1, 1970"
- android:textSize="20dp"
- android:textStyle="bold"
- android:padding="10dp"
- android:layout_width="wrap_content"
- android:layout_height="wrap_content"
- android:singleLine="true"
- android:ellipsize="marquee"
- android:marqueeRepeatLimit ="marquee_forever"
- android:focusable="true"
- android:focusableInTouchMode="true"
- android:scrollHorizontally="true"
- />
- </RelativeLayout>
- <RelativeLayout
- android:id="@+id/second"
- android:layout_below="@+id/first"
- android:layout_marginLeft="1dp"
- android:layout_marginRight="1dp"
- android:layout_marginBottom="1dp"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="#000000"
- >
- <DatePicker
- android:padding="5dp"
- android:editable="false"
- android:focusableInTouchMode="false"
- android:gravity="center"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:id="@+id/datepick"
- />
- </RelativeLayout>
- <RelativeLayout
- android:id="@+id/third"
- android:layout_below="@+id/second"
- android:layout_marginLeft="2dp"
- android:layout_marginRight="2dp"
- android:layout_width="fill_parent"
- android:layout_height="wrap_content"
- android:background="#000000"
- android:paddingBottom="5dp"
- >
- <Button android:textSize="20dp"
- android:textStyle="bold"
- android:id="@+id/set"
- android:layout_margin="10dp"
- android:layout_width="130dp"
- android:layout_height="wrap_content"
- android:text="Set"
- android:textColor="#000000"
- />
- <Button android:textSize="20dp"
- android:textStyle="bold"
- android:id="@+id/cancel"
- android:layout_toRightOf="@+id/set"
- android:layout_margin="10dp"
- android:layout_width="135dp"
- android:layout_height="wrap_content"
- android:text="Cancel"
- android:textColor="#000000"
- />
- </RelativeLayout>
- </RelativeLayout>
- //CustomDatePickerDialogActivity.Java
- public class CustomDatePickerDialogActivity extends Activity {
- TextView tv;
- Button time_btn;
- String date_selected="";
- String checkdate="";
- final Calendar c = Calendar.getInstance();
- int maxYear = c.get(Calendar.YEAR);
- int maxMonth = c.get(Calendar.MONTH);
- int maxDay = c.get(Calendar.DAY_OF_MONTH);
- int weekday= c.get(Calendar.DAY_OF_WEEK);
- int minYear = 1900;
- int minMonth = 0; // january
- int minDay = 1;
- /** Called when the activity is first created. */
- @Override
- public void onCreate(Bundle savedInstanceState) {
- super.onCreate(savedInstanceState);
- requestWindowFeature(Window.FEATURE_NO_TITLE);
- setContentView(R.layout.main);
- tv=(TextView)findViewById(R.id.date_txt);
- time_btn=(Button)findViewById(R.id.time_btn);
- time_btn.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- // TODO Auto-generated method stub
- showcustomdatepickerDialog();
- }
- });
- }
- public void showcustomdatepickerDialog()
- {
- final Dialog dialog=new Dialog(CustomDatePickerDialogActivity.this);
- dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
- dialog.setContentView(R.layout.customdatepickerdialog);
- final TextView actualtime=(TextView)dialog.findViewById(R.id.actualtime);
- final DatePicker BirthDateDP = (DatePicker)dialog.findViewById(R.id.datepick);
- Button set=(Button)dialog.findViewById(R.id.set);
- Button cancel=(Button)dialog.findViewById(R.id.cancel);
- dialog.show();
- String monthstring=getmonthString(maxMonth);
- String weekstring=getweekString(weekday);
- actualtime.setText(weekstring+","+" "+monthstring+" "+maxDay+","+" "+maxYear);
- InputMethodManager imm = (InputMethodManager)getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.hideSoftInputFromWindow(BirthDateDP.getWindowToken(), 0);
- setDisabledTextViews(BirthDateDP);
- if(tv.getText().toString().equalsIgnoreCase(""))
- {
- BirthDateDP.init(maxYear, maxMonth, maxDay, new OnDateChangedListener()
- {
- public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
- {
- if (year < minYear)
- {
- view.updateDate(minYear, minMonth, minDay);
- String monthstring=getmonthString(minMonth);
- Date date= (new GregorianCalendar(minYear, minMonth, minDay)).getTime();
- SimpleDateFormat f = new SimpleDateFormat("EEEE");
- String day=f.format(date);
- actualtime.setText(day+","+" "+monthstring+" "+minDay+","+" "+minYear);
- }
- else if (monthOfYear < minMonth && year == minYear)
- {
- view.updateDate(minYear, minMonth, minDay);
- String monthstring=getmonthString(minMonth);
- Date date= (new GregorianCalendar(minYear, minMonth, minDay)).getTime();
- SimpleDateFormat f = new SimpleDateFormat("EEEE");
- String day=f.format(date);
- actualtime.setText(day+","+" "+monthstring+" "+minDay+","+" "+minYear);
- }
- else if (dayOfMonth < minDay && year == minYear && monthOfYear == minMonth)
- {
- view.updateDate(minYear, minMonth, minDay);
- String monthstring=getmonthString(minMonth);
- Date date= (new GregorianCalendar(minYear, minMonth, minDay)).getTime();
- SimpleDateFormat f = new SimpleDateFormat("EEEE");
- String day=f.format(date);
- actualtime.setText(day+","+" "+monthstring+" "+minDay+","+" "+minYear);
- }
- else if (year > maxYear)
- {
- view.updateDate(maxYear, maxMonth, maxDay);
- String monthstring=getmonthString(maxMonth);
- Date date= (new GregorianCalendar(maxYear, maxMonth, maxDay)).getTime();
- SimpleDateFormat f = new SimpleDateFormat("EEEE");
- String day=f.format(date);
- actualtime.setText(day+","+" "+monthstring+" "+maxDay+","+" "+maxYear);
- }
- else if (monthOfYear > maxMonth && year == maxYear)
- {
- view.updateDate(maxYear, maxMonth, maxDay);
- String monthstring=getmonthString(maxMonth);
- Date date= (new GregorianCalendar(maxYear, maxMonth, maxDay)).getTime();
- SimpleDateFormat f = new SimpleDateFormat("EEEE");
- String day=f.format(date);
- actualtime.setText(day+","+" "+monthstring+" "+maxDay+","+" "+maxYear);
- }
- else if (dayOfMonth > maxDay && year == maxYear && monthOfYear == maxMonth)
- {
- view.updateDate(maxYear, maxMonth, maxDay);
- String monthstring=getmonthString(maxMonth);
- Date date= (new GregorianCalendar(maxYear, maxMonth, maxDay)).getTime();
- SimpleDateFormat f = new SimpleDateFormat("EEEE");
- String day=f.format(date);
- actualtime.setText(day+","+" "+monthstring+" "+maxDay+","+" "+maxYear);
- }
- else
- {
- view.updateDate(year, monthOfYear, dayOfMonth);
- String monthstring=getmonthString(monthOfYear);
- Date date= (new GregorianCalendar(year, monthOfYear, dayOfMonth)).getTime();
- SimpleDateFormat f = new SimpleDateFormat("EEEE");
- String day=f.format(date);
- actualtime.setText(day+","+" "+monthstring+" "+dayOfMonth+","+" "+year);
- }
- }});
- }
- else
- {
- String tmp[]=tv.getText().toString().split("-");
- String monthistring=getmonthString(Integer.parseInt(tmp[0].trim())-1);
- Date date= (new GregorianCalendar(Integer.parseInt(tmp[2].trim()), Integer.parseInt(tmp[0].trim())-1,Integer.parseInt(tmp[1].trim()))).getTime();
- SimpleDateFormat f = new SimpleDateFormat("EEEE");
- String day=f.format(date);
- actualtime.setText(day+","+" "+monthistring+" "+Integer.parseInt(tmp[1].trim())+","+" "+Integer.parseInt(tmp[2].trim()));
- BirthDateDP.init(Integer.parseInt(tmp[2].trim()), Integer.parseInt(tmp[0].trim())-1,Integer.parseInt(tmp[1].trim()), new OnDateChangedListener()
- {
- public void onDateChanged(DatePicker view, int year, int monthOfYear, int dayOfMonth)
- {
- if (year < minYear)
- {
- view.updateDate(minYear, minMonth, minDay);
- String monthstring=getmonthString(minMonth);
- Date date= (new GregorianCalendar(minYear, minMonth, minDay)).getTime();
- SimpleDateFormat f = new SimpleDateFormat("EEEE");
- String day=f.format(date);
- actualtime.setText(day+","+" "+monthstring+" "+minDay+","+" "+minYear);
- }
- else if (monthOfYear < minMonth && year == minYear)
- {
- view.updateDate(minYear, minMonth, minDay);
- String monthstring=getmonthString(minMonth);
- Date date= (new GregorianCalendar(minYear, minMonth, minDay)).getTime();
- SimpleDateFormat f = new SimpleDateFormat("EEEE");
- String day=f.format(date);
- actualtime.setText(day+","+" "+monthstring+" "+minDay+","+" "+minYear);
- }
- else if (dayOfMonth < minDay && year == minYear && monthOfYear == minMonth)
- {
- view.updateDate(minYear, minMonth, minDay);
- String monthstring=getmonthString(minMonth);
- Date date= (new GregorianCalendar(minYear, minMonth, minDay)).getTime();
- SimpleDateFormat f = new SimpleDateFormat("EEEE");
- String day=f.format(date);
- actualtime.setText(day+","+" "+monthstring+" "+minDay+","+" "+minYear);
- }
- else if (year > maxYear)
- {
- view.updateDate(maxYear, maxMonth, maxDay);
- String monthstring=getmonthString(maxMonth);
- Date date= (new GregorianCalendar(maxYear, maxMonth, maxDay)).getTime();
- SimpleDateFormat f = new SimpleDateFormat("EEEE");
- String day=f.format(date);
- actualtime.setText(day+","+" "+monthstring+" "+maxDay+","+" "+maxYear);
- }
- else if (monthOfYear > maxMonth && year == maxYear)
- {
- view.updateDate(maxYear, maxMonth, maxDay);
- String monthstring=getmonthString(maxMonth);
- Date date= (new GregorianCalendar(maxYear, maxMonth, maxDay)).getTime();
- SimpleDateFormat f = new SimpleDateFormat("EEEE");
- String day=f.format(date);
- actualtime.setText(day+","+" "+monthstring+" "+maxDay+","+" "+maxYear);
- }
- else if (dayOfMonth > maxDay && year == maxYear && monthOfYear == maxMonth)
- {
- view.updateDate(maxYear, maxMonth, maxDay);
- String monthstring=getmonthString(maxMonth);
- Date date= (new GregorianCalendar(maxYear, maxMonth, maxDay)).getTime();
- SimpleDateFormat f = new SimpleDateFormat("EEEE");
- String day=f.format(date);
- actualtime.setText(day+","+" "+monthstring+" "+maxDay+","+" "+maxYear);
- }
- else
- {
- view.updateDate(year, monthOfYear, dayOfMonth);
- //Integer.parseInt(tmp[2].trim()), Integer.parseInt(tmp[0].trim())-1,Integer.parseInt(tmp[1].trim())
- String monthstring=getmonthString(monthOfYear);
- Date date= (new GregorianCalendar(year, monthOfYear, dayOfMonth)).getTime();
- SimpleDateFormat f = new SimpleDateFormat("EEEE");
- String day=f.format(date);
- actualtime.setText(day+","+" "+monthstring+" "+dayOfMonth+","+" "+year);
- }
- }});
- }
- cancel.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- // TODO Auto-generated method stub
- dialog.dismiss();
- }
- });
- set.setOnClickListener(new OnClickListener() {
- public void onClick(View v) {
- // TODO Auto-generated method stub
- int year=BirthDateDP.getYear();
- int monthOfYear=BirthDateDP.getMonth();
- int dayOfMonth=BirthDateDP.getDayOfMonth();
- // TODO Auto-generated method stub
- if(monthOfYear < 10 && !String.valueOf(monthOfYear).contains("0"))
- {
- if(dayOfMonth < 10 && !String.valueOf(dayOfMonth).contains("0"))
- {
- date_selected = "0"+String.valueOf(monthOfYear+1)+" -0"+String.valueOf(dayOfMonth)+" -"+String.valueOf(year);
- //selectedDateForDb = String.valueOf(year)+"-"+"0"+String.valueOf(monthOfYear+1)+"-0"+String.valueOf(dayOfMonth);
- }
- else
- {
- date_selected = "0"+String.valueOf(monthOfYear+1)+" -"+String.valueOf(dayOfMonth)+" -"+String.valueOf(year);
- //selectedDateForDb = String.valueOf(year)+"-0"+String.valueOf(monthOfYear+1)+"-"+String.valueOf(dayOfMonth);
- }
- }
- else if(dayOfMonth < 10 && !String.valueOf(dayOfMonth).contains("0"))
- {
- date_selected = String.valueOf(monthOfYear+1)+" -0"+String.valueOf(dayOfMonth)+" -"+String.valueOf(year);
- //selectedDateForDb = String.valueOf(year)+"-"+String.valueOf(monthOfYear+1)+"-0"+String.valueOf(dayOfMonth);
- }
- else
- {
- date_selected = String.valueOf(monthOfYear+1)+" -"+String.valueOf(dayOfMonth)+" -"+String.valueOf(year);
- //selectedDateForDb = String.valueOf(year)+"-"+String.valueOf(monthOfYear+1)+"-"+String.valueOf(dayOfMonth);
- }
- tv.setText(date_selected);
- dialog.dismiss();
- }
- });
- }
- String getmonthString(int month_num)
- {
- String str="";
- if(month_num==0)
- {
- str="Jan";
- }
- else if(month_num==1)
- {
- str="Feb";
- }
- else if(month_num==2)
- {
- str="Mar";
- }
- else if(month_num==3)
- {
- str="Apr";
- }
- else if(month_num==4)
- {
- str="May";
- }
- else if(month_num==5)
- {
- str="Jun";
- }
- else if(month_num==6)
- {
- str="Jul";
- }
- else if(month_num==7)
- {
- str="Aug";
- }
- else if(month_num==8)
- {
- str="Sep";
- }
- else if(month_num==9)
- {
- str="Oct";
- }
- else if(month_num==10)
- {
- str="Nov";
- }
- else if(month_num==11)
- {
- str="Dec";
- }
- return str;
- }
- String getweekString(int dayno)
- {
- String str="";
- if(dayno==1)
- {
- str="Sunday";
- }
- else if(dayno==2)
- {
- str="Monday";
- }
- else if(dayno==3)
- {
- str="Tuesday";
- }
- else if(dayno==4)
- {
- str="Wednesday";
- }
- else if(dayno==5)
- {
- str="Thursday";
- }
- else if(dayno==6)
- {
- str="Friday";
- }
- else if(dayno==7)
- {
- str="Satuarday";
- }
- return str;
- }
- private void setDisabledTextViews(ViewGroup dp)
- {
- for (int x = 0, n = dp.getChildCount(); x < n; x++)
- {
- View v = dp.getChildAt(x);
- if (v instanceof TextView)
- {
- v.setEnabled(false);
- }
- else if (v instanceof ViewGroup)
- {
- setDisabledTextViews((ViewGroup)v);
- }
- }
- }
- }