package org.itsnat.droid.impl.xmlinflater.layout.attr.widget; import android.content.Context; import android.view.View; import org.itsnat.droid.impl.dom.DOMAttr; import org.itsnat.droid.impl.xmlinflater.FieldContainer; import org.itsnat.droid.impl.xmlinflater.MethodContainer; import org.itsnat.droid.impl.xmlinflater.layout.AttrLayoutContext; import org.itsnat.droid.impl.xmlinflater.layout.ViewStyleAttribs; import org.itsnat.droid.impl.xmlinflater.layout.ViewStyleAttribsDynamic; import org.itsnat.droid.impl.xmlinflater.layout.classtree.ClassDescViewBased; import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDesc; import java.util.ArrayList; import java.util.List; /** * Created by jmarranz on 30/04/14. */ public class AttrDescView_widget_CalendarView_dateTextAppearance extends AttrDesc<ClassDescViewBased,View,AttrLayoutContext> { protected FieldContainer<Integer> fieldTextAppearance_Small; protected MethodContainer<Void> methodDateTextAppearance; public AttrDescView_widget_CalendarView_dateTextAppearance(ClassDescViewBased parent) { super(parent,"dateTextAppearance"); Class class_R_styleable = getClass_R_styleable(); // com.android.internal.R$styleable this.fieldTextAppearance_Small = new FieldContainer<Integer>(class_R_styleable, "TextAppearance_Small"); // A partir de level 16 hay un método setDateTextAppearance (int resourceId). Podríamos usar lo de ICS pero en Lollipop cambia CalendarView a fondo usando un "delegate" this.methodDateTextAppearance = new MethodContainer<Void>(parent.getDeclaredClass(),"setDateTextAppearance",new Class[]{int.class}); } @Override public void setAttribute(View view, DOMAttr attr, AttrLayoutContext attrCtx) { Context ctx = attrCtx.getContext(); ViewStyleAttribs style = getViewStyle(attr.getResourceDesc(), attrCtx.getXMLInflaterContext()); List<DOMAttr> styleItemsDynamicAttribs = (style instanceof ViewStyleAttribsDynamic) ? new ArrayList<DOMAttr>() : null; int dateTextAppearanceResId = getViewStyle(style,styleItemsDynamicAttribs,ctx); setDateTextAppearanceResId(view,dateTextAppearanceResId,attrCtx); if (styleItemsDynamicAttribs != null) { ClassDescViewBased classDesc = getClassDesc(); for(DOMAttr styleAttr : styleItemsDynamicAttribs) { classDesc.setAttributeOrInlineEventHandler(view,styleAttr,attrCtx); } } } private void setDateTextAppearanceResId(View view,int dateTextAppearanceResId,AttrLayoutContext attrCtx) { if (dateTextAppearanceResId <= 0) dateTextAppearanceResId = fieldTextAppearance_Small.get(null); // Valor por defecto methodDateTextAppearance.invoke(view,dateTextAppearanceResId); } @Override public void removeAttribute(View view, AttrLayoutContext attrCtx) { // Se usa el valor por defecto de Android setAttributeToRemove(view, "0", attrCtx); } }