package org.itsnat.droid.impl.xmlinflater.layout.classtree; import android.content.res.Configuration; import android.content.res.TypedArray; import android.os.Build; import android.view.ContextThemeWrapper; import org.itsnat.droid.impl.dom.DOMAttr; import org.itsnat.droid.impl.util.MiscUtil; import org.itsnat.droid.impl.util.NamespaceUtil; import org.itsnat.droid.impl.xmlinflater.layout.ClassDescViewMgr; import org.itsnat.droid.impl.xmlinflater.shared.GravityUtil; import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDescReflecMethodBoolean; import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDescReflecMethodDrawable; import org.itsnat.droid.impl.xmlinflater.shared.attr.AttrDescReflecMethodNameMultiple; import java.util.List; /** * Created by jmarranz on 30/04/14. */ public class ClassDescView_widget_FrameLayout extends ClassDescViewBased { private static final int[] layoutParamsAttrs = new int[]{android.R.attr.layout_gravity}; private static final String[] layoutParamsNames = new String[] {"layout_gravity"}; public ClassDescView_widget_FrameLayout(ClassDescViewMgr classMgr,ClassDescView_view_ViewGroup parentClass) { super(classMgr,"android.widget.FrameLayout",parentClass); } public static void getFrameLayoutLayoutParamsFromStyleId(int styleId,List<DOMAttr> styleLayoutParamsAttribs,ContextThemeWrapper ctx) { if (styleId == 0) throw MiscUtil.internalError(); Configuration configuration = ctx.getResources().getConfiguration(); TypedArray a = ctx.obtainStyledAttributes(styleId, layoutParamsAttrs); for(int i = 0; i < layoutParamsAttrs.length; i++) { if (!a.hasValue(i)) continue; int value = a.getInt(i,0); String name = layoutParamsNames[i]; // Esperamos sólo name = "layout_gravity" String valueStr = GravityUtil.getNameFromValue(value); // Ej 0x30 | 0x50 => "top|bottom" DOMAttr attr = DOMAttr.createDOMAttr(NamespaceUtil.XMLNS_ANDROID, name, valueStr); styleLayoutParamsAttribs.add(attr); } a.recycle(); // Llamamos a la clase base ClassDescView_view_ViewGroup.getViewGroupMarginLayoutParamsFromStyleId(styleId, styleLayoutParamsAttribs, ctx); } @SuppressWarnings("unchecked") protected void init() { super.init(); if (Build.VERSION.SDK_INT < MiscUtil.MARSHMALLOW) // < 23 { addAttrDescAN(new AttrDescReflecMethodDrawable(this, "foreground", "@null")); // A partir de MARSHMALLOW se define en View y como "foreground" NO y no se utiliza foregroundGravity por lo que podemos decir que foregroundGravity queda deprecated en MARSHMALLOW } addAttrDescAN(new AttrDescReflecMethodNameMultiple(this, "foregroundGravity", GravityUtil.nameValueMap, "fill")); addAttrDescAN(new AttrDescReflecMethodBoolean(this, "measureAllChildren", false)); } }