@Override
  public void setAttribute(final View view, DOMAttr attr, AttrLayoutContext attrCtx) {
    final String year = getString(attr.getResourceDesc(), attrCtx.getXMLInflaterContext());

    Object datePickerObject = getDatePickerObject(view);

    // Delegamos al final porque los atributos maxDate y minDate tienen prioridad (ganan si están
    // definidos)
    // sobre startYear y endYear
    Locale currentLocale = fieldCurrentLocale.get(datePickerObject);
    Calendar tempDate = Calendar.getInstance(currentLocale);
    tempDate.clear();

    if (!TextUtils.isEmpty(year)) {
      int yearInt = Integer.parseInt(year);
      if ("endYear".equals(name)) tempDate.set(yearInt, Calendar.DECEMBER /*11*/, 31);
      else if ("startYear".equals(name)) tempDate.set(yearInt, Calendar.JANUARY /*0*/, 1);
    } else {
      // Caso de eliminación de atributo, intrepretamos como el deseo de poner los valores por
      // defecto (más o menos es así en el código fuente)
      // hay que tener en cuenta que es un valor explícito por lo que ignoramos/reemplazamos los
      // posibles valores anteriores
      if ("endYear".equals(name)) tempDate.set(DEFAULT_END_YEAR, Calendar.DECEMBER /*11*/, 31);
      else if ("startYear".equals(name))
        tempDate.set(DEFAULT_START_YEAR, Calendar.JANUARY /*0*/, 1);
    }

    methodMaxMinDate.invoke(datePickerObject, tempDate.getTimeInMillis());
  }
 private Object getDatePickerObject(View view) {
   if (Build.VERSION.SDK_INT < MiscUtil.LOLLIPOP) return (DatePicker) view;
   else return fieldDelegate.get(view);
 }