public DatePicker(Context context, AttributeSet attrs) {
    super(context, attrs);
    mContext = context;
    mCalendar = Calendar.getInstance();
    initMonthDisplay();
    ((LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE))
        .inflate(R.layout.date_picker, this, true);
    mDayPicker = (NumberPicker) findViewById(R.id.date_day);
    mMonthPicker = (NumberPicker) findViewById(R.id.date_month);
    mYearPicker = (NumberPicker) findViewById(R.id.date_year);

    mDayPicker.setMinValue(1);
    mDayPicker.setMaxValue(31);
    mDayPicker.setValue(20);
    mDayPicker.setFormatter(NumberPicker.TWO_DIGIT_FORMATTER);

    mMonthPicker.setMinValue(0);
    mMonthPicker.setMaxValue(11);
    mMonthPicker.setDisplayedValues(mMonthDisplay);
    mMonthPicker.setValue(mCalendar.get(Calendar.MONTH));

    mYearPicker.setMinValue(1950);
    mYearPicker.setMaxValue(2100);
    mYearPicker.setValue(mCalendar.get(Calendar.YEAR));

    mMonthPicker.setOnValueChangedListener(
        new OnValueChangeListener() {

          @Override
          public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
            mCalendar.set(Calendar.MONTH, newVal);
            updateDate();
          }
        });
    mDayPicker.setOnValueChangedListener(
        new OnValueChangeListener() {

          @Override
          public void onValueChange(NumberPicker picker, int oldVal, int newVal) {

            mCalendar.set(Calendar.DATE, newVal);
            updateDate();
          }
        });
    mYearPicker.setOnValueChangedListener(
        new OnValueChangeListener() {

          @Override
          public void onValueChange(NumberPicker picker, int oldVal, int newVal) {
            mCalendar.set(Calendar.YEAR, newVal);
            updateDate();
          }
        });

    updateDate();
  }