package org.itsnat.droid.impl.xmlinflater.layout.attr; import android.graphics.Typeface; import android.view.View; import org.itsnat.droid.impl.dom.DOMAttr; import org.itsnat.droid.impl.util.MapSmart; import org.itsnat.droid.impl.xmlinflater.layout.AttrLayoutContext; import org.itsnat.droid.impl.xmlinflater.layout.PendingViewPostCreateProcess; import org.itsnat.droid.impl.xmlinflater.layout.classtree.ClassDescViewBased; import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDesc; /** * Created by jmarranz on 30/04/14. */ public abstract class AttrDescViewTextStyle extends AttrDesc<ClassDescViewBased,View,AttrLayoutContext> { public static final MapSmart<String,Integer> nameValueMap = MapSmart.<String,Integer>create( 3 ); static { nameValueMap.put("normal", Typeface.NORMAL); // 0 nameValueMap.put("bold", Typeface.BOLD); // 1 nameValueMap.put("italic", Typeface.ITALIC); // 2 } public AttrDescViewTextStyle(ClassDescViewBased parent, String name) { super(parent,name); } @Override public void setAttribute(final View view, DOMAttr attr, AttrLayoutContext attrCtx) { final int style = parseMultipleName(attr.getValue(), nameValueMap); // Si se define un atributo typeface el style lo ejecutamos después final Runnable task = new Runnable() { @Override public void run() { setTextStyle(view,style); } }; PendingViewPostCreateProcess pendingViewPostCreateProcess = attrCtx.getPendingViewPostCreateProcess(); if (pendingViewPostCreateProcess != null) { // Delegamos al final para que esté totalmente claro si hay o no scrollbars pendingViewPostCreateProcess.addPendingSetAttribsTask(task); } else task.run(); } @Override public void removeAttribute(View view, AttrLayoutContext attrCtx) { setAttributeToRemove(view, "normal",attrCtx); } protected abstract void setTextStyle(View view,int style); }