FileDocCategorySizeDatePackage
TypedArray.javaAPI DocAndroid 1.5 API26629Wed May 06 22:41:54 BST 2009android.content.res

TypedArray

public class TypedArray extends Object
Container for an array of values that were retrieved with {@link Resources.Theme#obtainStyledAttributes(AttributeSet, int[], int, int)} or {@link Resources#obtainAttributes}. Be sure to call {@link #recycle} when done with them. The indices used to retrieve values from this structure correspond to the positions of the attributes given to obtainStyledAttributes.

Fields Summary
private final Resources
mResources
XmlBlock.Parser
mXml
int[]
mRsrcs
int[]
mData
int[]
mIndices
int
mLength
private android.util.TypedValue
mValue
Constructors Summary
TypedArray(Resources resources, int[] data, int[] indices, int len)

        mResources = resources;
        mData = data;
        mIndices = indices;
        mLength = len;
    
Methods Summary
public booleangetBoolean(int index, boolean defValue)
Retrieve the boolean value for the attribute at index.

param
index Index of attribute to retrieve.
param
defValue Value to return if the attribute is not defined.
return
Attribute boolean value, or defValue if not defined.

        index *= AssetManager.STYLE_NUM_ENTRIES;
        final int[] data = mData;
        final int type = data[index+AssetManager.STYLE_TYPE];
        if (type == TypedValue.TYPE_NULL) {
            return defValue;
        } else if (type >= TypedValue.TYPE_FIRST_INT
            && type <= TypedValue.TYPE_LAST_INT) {
            return data[index+AssetManager.STYLE_DATA] != 0;
        }

        TypedValue v = mValue;
        if (getValueAt(index, v)) {
            Log.w(Resources.TAG, "Converting to boolean: " + v);
            return XmlUtils.convertValueToBoolean(
                v.coerceToString(), defValue);
        }
        Log.w(Resources.TAG, "getBoolean of bad type: 0x"
              + Integer.toHexString(type));
        return defValue;
    
public intgetColor(int index, int defValue)
Retrieve the color value for the attribute at index. If the attribute references a color resource holding a complex {@link android.content.res.ColorStateList}, then the default color from the set is returned.

param
index Index of attribute to retrieve.
param
defValue Value to return if the attribute is not defined or not a resource.
return
Attribute color value, or defValue if not defined.

        index *= AssetManager.STYLE_NUM_ENTRIES;
        final int[] data = mData;
        final int type = data[index+AssetManager.STYLE_TYPE];
        if (type == TypedValue.TYPE_NULL) {
            return defValue;
        } else if (type >= TypedValue.TYPE_FIRST_INT
            && type <= TypedValue.TYPE_LAST_INT) {
            return data[index+AssetManager.STYLE_DATA];
        } else if (type == TypedValue.TYPE_STRING) {
            final TypedValue value = mValue;
            if (getValueAt(index, value)) {
                ColorStateList csl = mResources.loadColorStateList(
                        value, value.resourceId);
                return csl.getDefaultColor();
            }
            return defValue;
        }

        throw new UnsupportedOperationException("Can't convert to color: type=0x"
                + Integer.toHexString(type));
    
public ColorStateListgetColorStateList(int index)
Retrieve the ColorStateList for the attribute at index. The value may be either a single solid color or a reference to a color or complex {@link android.content.res.ColorStateList} description.

param
index Index of attribute to retrieve.
return
ColorStateList for the attribute, or null if not defined.

        final TypedValue value = mValue;
        if (getValueAt(index*AssetManager.STYLE_NUM_ENTRIES, value)) {
            return mResources.loadColorStateList(value, value.resourceId);
        }
        return null;
    
public floatgetDimension(int index, float defValue)
Retrieve a dimensional unit attribute at index. Unit conversions are based on the current {@link DisplayMetrics} associated with the resources this {@link TypedArray} object came from.

param
index Index of attribute to retrieve.
param
defValue Value to return if the attribute is not defined or not a resource.
return
Attribute dimension value multiplied by the appropriate metric, or defValue if not defined.
see
#getDimensionPixelOffset
see
#getDimensionPixelSize

        index *= AssetManager.STYLE_NUM_ENTRIES;
        final int[] data = mData;
        final int type = data[index+AssetManager.STYLE_TYPE];
        if (type == TypedValue.TYPE_NULL) {
            return defValue;
        } else if (type == TypedValue.TYPE_DIMENSION) {
            return TypedValue.complexToDimension(
                data[index+AssetManager.STYLE_DATA], mResources.mMetrics);
        }

        throw new UnsupportedOperationException("Can't convert to dimension: type=0x"
                + Integer.toHexString(type));
    
public intgetDimensionPixelOffset(int index, int defValue)
Retrieve a dimensional unit attribute at index for use as an offset in raw pixels. This is the same as {@link #getDimension}, except the returned value is converted to integer pixels for you. An offset conversion involves simply truncating the base value to an integer.

param
index Index of attribute to retrieve.
param
defValue Value to return if the attribute is not defined or not a resource.
return
Attribute dimension value multiplied by the appropriate metric and truncated to integer pixels, or defValue if not defined.
see
#getDimension
see
#getDimensionPixelSize

        index *= AssetManager.STYLE_NUM_ENTRIES;
        final int[] data = mData;
        final int type = data[index+AssetManager.STYLE_TYPE];
        if (type == TypedValue.TYPE_NULL) {
            return defValue;
        } else if (type == TypedValue.TYPE_DIMENSION) {
            return TypedValue.complexToDimensionPixelOffset(
                data[index+AssetManager.STYLE_DATA], mResources.mMetrics);
        }

        throw new UnsupportedOperationException("Can't convert to dimension: type=0x"
                + Integer.toHexString(type));
    
public intgetDimensionPixelSize(int index, int defValue)
Retrieve a dimensional unit attribute at index for use as a size in raw pixels. This is the same as {@link #getDimension}, except the returned value is converted to integer pixels for use as a size. A size conversion involves rounding the base value, and ensuring that a non-zero base value is at least one pixel in size.

param
index Index of attribute to retrieve.
param
defValue Value to return if the attribute is not defined or not a resource.
return
Attribute dimension value multiplied by the appropriate metric and truncated to integer pixels, or defValue if not defined.
see
#getDimension
see
#getDimensionPixelOffset

        index *= AssetManager.STYLE_NUM_ENTRIES;
        final int[] data = mData;
        final int type = data[index+AssetManager.STYLE_TYPE];
        if (type == TypedValue.TYPE_NULL) {
            return defValue;
        } else if (type == TypedValue.TYPE_DIMENSION) {
            return TypedValue.complexToDimensionPixelSize(
                data[index+AssetManager.STYLE_DATA], mResources.mMetrics);
        }

        throw new UnsupportedOperationException("Can't convert to dimension: type=0x"
                + Integer.toHexString(type));
    
public android.graphics.drawable.DrawablegetDrawable(int index)
Retrieve the Drawable for the attribute at index. This gets the resource ID of the selected attribute, and uses {@link Resources#getDrawable Resources.getDrawable} of the owning Resources object to retrieve its Drawable.

param
index Index of attribute to retrieve.
return
Drawable for the attribute, or null if not defined.

        final TypedValue value = mValue;
        if (getValueAt(index*AssetManager.STYLE_NUM_ENTRIES, value)) {
            if (false) {
                System.out.println("******************************************************************");
                System.out.println("Got drawable resource: type="
                                   + value.type
                                   + " str=" + value.string
                                   + " int=0x" + Integer.toHexString(value.data)
                                   + " cookie=" + value.assetCookie);
                System.out.println("******************************************************************");
            }
            return mResources.loadDrawable(value, value.resourceId);
        }
        return null;
    
public floatgetFloat(int index, float defValue)
Retrieve the float value for the attribute at index.

param
index Index of attribute to retrieve.
return
Attribute float value, or defValue if not defined..

        index *= AssetManager.STYLE_NUM_ENTRIES;
        final int[] data = mData;
        final int type = data[index+AssetManager.STYLE_TYPE];
        if (type == TypedValue.TYPE_NULL) {
            return defValue;
        } else if (type == TypedValue.TYPE_FLOAT) {
            return Float.intBitsToFloat(data[index+AssetManager.STYLE_DATA]);
        } else if (type >= TypedValue.TYPE_FIRST_INT
            && type <= TypedValue.TYPE_LAST_INT) {
            return data[index+AssetManager.STYLE_DATA];
        }

        TypedValue v = mValue;
        if (getValueAt(index, v)) {
            Log.w(Resources.TAG, "Converting to float: " + v);
            CharSequence str = v.coerceToString();
            if (str != null) {
                return Float.parseFloat(str.toString());
            }
        }
        Log.w(Resources.TAG, "getFloat of bad type: 0x"
              + Integer.toHexString(type));
        return defValue;
    
public floatgetFraction(int index, int base, int pbase, float defValue)
Retrieve a fractional unit attribute at index.

param
index Index of attribute to retrieve.
param
base The base value of this fraction. In other words, a standard fraction is multiplied by this value.
param
pbase The parent base value of this fraction. In other words, a parent fraction (nn%p) is multiplied by this value.
param
defValue Value to return if the attribute is not defined or not a resource.
return
Attribute fractional value multiplied by the appropriate base value, or defValue if not defined.

        index *= AssetManager.STYLE_NUM_ENTRIES;
        final int[] data = mData;
        final int type = data[index+AssetManager.STYLE_TYPE];
        if (type == TypedValue.TYPE_NULL) {
            return defValue;
        } else if (type == TypedValue.TYPE_FRACTION) {
            return TypedValue.complexToFraction(
                data[index+AssetManager.STYLE_DATA], base, pbase);
        }

        throw new UnsupportedOperationException("Can't convert to fraction: type=0x"
                + Integer.toHexString(type));
    
public intgetIndex(int at)
Return an index in the array that has data.

param
at The index you would like to returned, ranging from 0 to {@link #getIndexCount()}.
return
The index at the given offset, which can be used with {@link #getValue} and related APIs.

        return mIndices[1+at];
    
public intgetIndexCount()
Return the number of indices in the array that actually have data.

        return mIndices[0];
    
public intgetInt(int index, int defValue)
Retrieve the integer value for the attribute at index.

param
index Index of attribute to retrieve.
param
defValue Value to return if the attribute is not defined.
return
Attribute int value, or defValue if not defined.

        index *= AssetManager.STYLE_NUM_ENTRIES;
        final int[] data = mData;
        final int type = data[index+AssetManager.STYLE_TYPE];
        if (type == TypedValue.TYPE_NULL) {
            return defValue;
        } else if (type >= TypedValue.TYPE_FIRST_INT
            && type <= TypedValue.TYPE_LAST_INT) {
            return data[index+AssetManager.STYLE_DATA];
        }

        TypedValue v = mValue;
        if (getValueAt(index, v)) {
            Log.w(Resources.TAG, "Converting to int: " + v);
            return XmlUtils.convertValueToInt(
                v.coerceToString(), defValue);
        }
        Log.w(Resources.TAG, "getInt of bad type: 0x"
              + Integer.toHexString(type));
        return defValue;
    
public intgetInteger(int index, int defValue)
Retrieve the integer value for the attribute at index.

param
index Index of attribute to retrieve.
param
defValue Value to return if the attribute is not defined or not a resource.
return
Attribute integer value, or defValue if not defined.

        index *= AssetManager.STYLE_NUM_ENTRIES;
        final int[] data = mData;
        final int type = data[index+AssetManager.STYLE_TYPE];
        if (type == TypedValue.TYPE_NULL) {
            return defValue;
        } else if (type >= TypedValue.TYPE_FIRST_INT
            && type <= TypedValue.TYPE_LAST_INT) {
            return data[index+AssetManager.STYLE_DATA];
        }

        throw new UnsupportedOperationException("Can't convert to integer: type=0x"
                + Integer.toHexString(type));
    
public intgetLayoutDimension(int index, java.lang.String name)
Special version of {@link #getDimensionPixelSize} for retrieving {@link android.view.ViewGroup}'s layout_width and layout_height attributes. This is only here for performance reasons; applications should use {@link #getDimensionPixelSize}.

param
index Index of the attribute to retrieve.
param
name Textual name of attribute for error reporting.
return
Attribute dimension value multiplied by the appropriate metric and truncated to integer pixels.

        index *= AssetManager.STYLE_NUM_ENTRIES;
        final int[] data = mData;
        final int type = data[index+AssetManager.STYLE_TYPE];
        if (type >= TypedValue.TYPE_FIRST_INT
                && type <= TypedValue.TYPE_LAST_INT) {
            return data[index+AssetManager.STYLE_DATA];
        } else if (type == TypedValue.TYPE_DIMENSION) {
            return TypedValue.complexToDimensionPixelSize(
                data[index+AssetManager.STYLE_DATA], mResources.mMetrics);
        }

        throw new RuntimeException(getPositionDescription()
                + ": You must supply a " + name + " attribute.");
    
public intgetLayoutDimension(int index, int defValue)
Special version of {@link #getDimensionPixelSize} for retrieving {@link android.view.ViewGroup}'s layout_width and layout_height attributes. This is only here for performance reasons; applications should use {@link #getDimensionPixelSize}.

param
index Index of the attribute to retrieve.
param
defValue The default value to return if this attribute is not default or contains the wrong type of data.
return
Attribute dimension value multiplied by the appropriate metric and truncated to integer pixels.

        index *= AssetManager.STYLE_NUM_ENTRIES;
        final int[] data = mData;
        final int type = data[index+AssetManager.STYLE_TYPE];
        if (type >= TypedValue.TYPE_FIRST_INT
                && type <= TypedValue.TYPE_LAST_INT) {
            return data[index+AssetManager.STYLE_DATA];
        } else if (type == TypedValue.TYPE_DIMENSION) {
            return TypedValue.complexToDimensionPixelSize(
                data[index+AssetManager.STYLE_DATA], mResources.mMetrics);
        }

        return defValue;
    
public java.lang.StringgetNonResourceString(int index)
Retrieve the string value for the attribute at index, but only if that string comes from an immediate value in an XML file. That is, this does not allow references to string resources, string attributes, or conversions from other types. As such, this method will only return strings for TypedArray objects that come from attributes in an XML file.

param
index Index of attribute to retrieve.
return
String holding string data. Any styling information is removed. Returns null if the attribute is not defined or is not an immediate string value.

        index *= AssetManager.STYLE_NUM_ENTRIES;
        final int[] data = mData;
        final int type = data[index+AssetManager.STYLE_TYPE];
        if (type == TypedValue.TYPE_STRING) {
            final int cookie = data[index+AssetManager.STYLE_ASSET_COOKIE];
            if (cookie < 0) {
                return mXml.getPooledString(
                    data[index+AssetManager.STYLE_DATA]).toString();
            }
        }
        return null;
    
public java.lang.StringgetPositionDescription()
Returns a message about the parser state suitable for printing error messages.

        return mXml != null ? mXml.getPositionDescription() : "<internal>";
    
public intgetResourceId(int index, int defValue)
Retrieve the resource identifier for the attribute at index. Note that attribute resource as resolved when the overall {@link TypedArray} object is retrieved. As a result, this function will return the resource identifier of the final resource value that was found, not necessarily the original resource that was specified by the attribute.

param
index Index of attribute to retrieve.
param
defValue Value to return if the attribute is not defined or not a resource.
return
Attribute resource identifier, or defValue if not defined.

        index *= AssetManager.STYLE_NUM_ENTRIES;
        final int[] data = mData;
        if (data[index+AssetManager.STYLE_TYPE] != TypedValue.TYPE_NULL) {
            final int resid = data[index+AssetManager.STYLE_RESOURCE_ID];
            if (resid != 0) {
                return resid;
            }
        }
        return defValue;
    
public ResourcesgetResources()
Return the Resources object this array was loaded from.

        return mResources;
    
public java.lang.StringgetString(int index)
Retrieve the string value for the attribute at index.

param
index Index of attribute to retrieve.
return
String holding string data. Any styling information is removed. Returns null if the attribute is not defined.

        index *= AssetManager.STYLE_NUM_ENTRIES;
        final int[] data = mData;
        final int type = data[index+AssetManager.STYLE_TYPE];
        if (type == TypedValue.TYPE_NULL) {
            return null;
        } else if (type == TypedValue.TYPE_STRING) {
            return loadStringValueAt(index).toString();
        }

        TypedValue v = mValue;
        if (getValueAt(index, v)) {
            Log.w(Resources.TAG, "Converting to string: " + v);
            CharSequence cs = v.coerceToString();
            return cs != null ? cs.toString() : null;
        }
        Log.w(Resources.TAG, "getString of bad type: 0x"
              + Integer.toHexString(type));
        return null;
    
public java.lang.CharSequencegetText(int index)
Retrieve the styled string value for the attribute at index.

param
index Index of attribute to retrieve.
return
CharSequence holding string data. May be styled. Returns null if the attribute is not defined.

        index *= AssetManager.STYLE_NUM_ENTRIES;
        final int[] data = mData;
        final int type = data[index+AssetManager.STYLE_TYPE];
        if (type == TypedValue.TYPE_NULL) {
            return null;
        } else if (type == TypedValue.TYPE_STRING) {
            return loadStringValueAt(index);
        }

        TypedValue v = mValue;
        if (getValueAt(index, v)) {
            Log.w(Resources.TAG, "Converting to string: " + v);
            return v.coerceToString();
        }
        Log.w(Resources.TAG, "getString of bad type: 0x"
              + Integer.toHexString(type));
        return null;
    
public java.lang.CharSequence[]getTextArray(int index)
Retrieve the CharSequence[] for the attribute at index. This gets the resource ID of the selected attribute, and uses {@link Resources#getTextArray Resources.getTextArray} of the owning Resources object to retrieve its String[].

param
index Index of attribute to retrieve.
return
CharSequence[] for the attribute, or null if not defined.

        final TypedValue value = mValue;
        if (getValueAt(index*AssetManager.STYLE_NUM_ENTRIES, value)) {
            if (false) {
                System.out.println("******************************************************************");
                System.out.println("Got drawable resource: type="
                                   + value.type
                                   + " str=" + value.string
                                   + " int=0x" + Integer.toHexString(value.data)
                                   + " cookie=" + value.assetCookie);
                System.out.println("******************************************************************");
            }
            return mResources.getTextArray(value.resourceId);
        }
        return null;
    
public booleangetValue(int index, android.util.TypedValue outValue)
Retrieve the raw TypedValue for the attribute at index.

param
index Index of attribute to retrieve.
param
outValue TypedValue object in which to place the attribute's data.
return
Returns true if the value was retrieved, else false.

        return getValueAt(index*AssetManager.STYLE_NUM_ENTRIES, outValue);
    
private booleangetValueAt(int index, android.util.TypedValue outValue)

        final int[] data = mData;
        final int type = data[index+AssetManager.STYLE_TYPE];
        if (type == TypedValue.TYPE_NULL) {
            return false;
        }
        outValue.type = type;
        outValue.data = data[index+AssetManager.STYLE_DATA];
        outValue.assetCookie = data[index+AssetManager.STYLE_ASSET_COOKIE];
        outValue.resourceId = data[index+AssetManager.STYLE_RESOURCE_ID];
        outValue.changingConfigurations = data[index+AssetManager.STYLE_CHANGING_CONFIGURATIONS];
        if (type == TypedValue.TYPE_STRING) {
            outValue.string = loadStringValueAt(index);
        }
        return true;
    
public booleanhasValue(int index)
Determines whether there is an attribute at index.

param
index Index of attribute to retrieve.
return
True if the attribute has a value, false otherwise.

        index *= AssetManager.STYLE_NUM_ENTRIES;
        final int[] data = mData;
        final int type = data[index+AssetManager.STYLE_TYPE];
        return type != TypedValue.TYPE_NULL;
    
public intlength()
Return the number of values in this array.

   
                 
       
        return mLength;
    
private java.lang.CharSequenceloadStringValueAt(int index)

        final int[] data = mData;
        final int cookie = data[index+AssetManager.STYLE_ASSET_COOKIE];
        if (cookie < 0) {
            if (mXml != null) {
                return mXml.getPooledString(
                    data[index+AssetManager.STYLE_DATA]);
            }
            return null;
        }
        //System.out.println("Getting pooled from: " + v);
        return mResources.mAssets.getPooledString(
            cookie, data[index+AssetManager.STYLE_DATA]);
    
public android.util.TypedValuepeekValue(int index)
Retrieve the raw TypedValue for the attribute at index and return a temporary object holding its data. This object is only valid until the next call on to {@link TypedArray}.

param
index Index of attribute to retrieve.
return
Returns a TypedValue object if the attribute is defined, containing its data; otherwise returns null. (You will not receive a TypedValue whose type is TYPE_NULL.)

        final TypedValue value = mValue;
        if (getValueAt(index*AssetManager.STYLE_NUM_ENTRIES, value)) {
            return value;
        }
        return null;
    
public voidrecycle()
Give back a previously retrieved StyledAttributes, for later re-use.

        synchronized (mResources.mTmpValue) {
            TypedArray cached = mResources.mCachedStyledAttributes;
            if (cached == null || cached.mData.length < mData.length) {
                mXml = null;
                mResources.mCachedStyledAttributes = this;
            }
        }
    
public java.lang.StringtoString()

        return Arrays.toString(mData);