Example usage for android.content.res TypedArray recycle

List of usage examples for android.content.res TypedArray recycle

Introduction

In this page you can find the example usage for android.content.res TypedArray recycle.

Prototype

public void recycle() 

Source Link

Document

Recycles the TypedArray, to be re-used by a later caller.

Usage

From source file:android.support.v7.internal.widget.ActivityChooserView.java

/**
 * Create a new instance.//from  ww  w .j a  v a 2 s  .c  o m
 *
 * @param context The application environment.
 * @param attrs A collection of attributes.
 * @param defStyle The default style to apply to this view.
 */
public ActivityChooserView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

    TypedArray attributesArray = context.obtainStyledAttributes(attrs, R.styleable.ActivityChooserView,
            defStyle, 0);

    mInitialActivityCount = attributesArray.getInt(R.styleable.ActivityChooserView_initialActivityCount,
            ActivityChooserViewAdapter.MAX_ACTIVITY_COUNT_DEFAULT);

    Drawable expandActivityOverflowButtonDrawable = attributesArray
            .getDrawable(R.styleable.ActivityChooserView_expandActivityOverflowButtonDrawable);

    attributesArray.recycle();

    LayoutInflater inflater = LayoutInflater.from(getContext());
    inflater.inflate(R.layout.abc_activity_chooser_view, this, true);

    mCallbacks = new Callbacks();

    mActivityChooserContent = (LinearLayoutCompat) findViewById(R.id.activity_chooser_view_content);
    mActivityChooserContentBackground = mActivityChooserContent.getBackground();

    mDefaultActivityButton = (FrameLayout) findViewById(R.id.default_activity_button);
    mDefaultActivityButton.setOnClickListener(mCallbacks);
    mDefaultActivityButton.setOnLongClickListener(mCallbacks);
    mDefaultActivityButtonImage = (ImageView) mDefaultActivityButton.findViewById(R.id.image);

    final FrameLayout expandButton = (FrameLayout) findViewById(R.id.expand_activities_button);
    expandButton.setOnClickListener(mCallbacks);
    expandButton.setOnTouchListener(new ListPopupWindow.ForwardingListener(expandButton) {
        @Override
        public ListPopupWindow getPopup() {
            return getListPopupWindow();
        }

        @Override
        protected boolean onForwardingStarted() {
            showPopup();
            return true;
        }

        @Override
        protected boolean onForwardingStopped() {
            dismissPopup();
            return true;
        }
    });
    mExpandActivityOverflowButton = expandButton;
    mExpandActivityOverflowButtonImage = (ImageView) expandButton.findViewById(R.id.image);
    mExpandActivityOverflowButtonImage.setImageDrawable(expandActivityOverflowButtonDrawable);

    mAdapter = new ActivityChooserViewAdapter();
    mAdapter.registerDataSetObserver(new DataSetObserver() {
        @Override
        public void onChanged() {
            super.onChanged();
            updateAppearance();
        }
    });

    Resources resources = context.getResources();
    mListPopupMaxWidth = Math.max(resources.getDisplayMetrics().widthPixels / 2,
            resources.getDimensionPixelSize(R.dimen.abc_config_prefDialogWidth));
}

From source file:com.actionbarsherlock.widget.ActivityChooserView.java

/**
 * Create a new instance./*from   www . j av a  2 s.c o m*/
 *
 * @param context The application environment.
 * @param attrs A collection of attributes.
 * @param defStyle The default style to apply to this view.
 */
public ActivityChooserView(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    mContext = context;

    TypedArray attributesArray = context.obtainStyledAttributes(attrs, R.styleable.SherlockActivityChooserView,
            defStyle, 0);

    mInitialActivityCount = attributesArray.getInt(R.styleable.SherlockActivityChooserView_initialActivityCount,
            ActivityChooserViewAdapter.MAX_ACTIVITY_COUNT_DEFAULT);

    Drawable expandActivityOverflowButtonDrawable = attributesArray
            .getDrawable(R.styleable.SherlockActivityChooserView_expandActivityOverflowButtonDrawable);

    attributesArray.recycle();

    LayoutInflater inflater = LayoutInflater.from(mContext);
    inflater.inflate(R.layout.abs__activity_chooser_view, this, true);

    mCallbacks = new Callbacks();

    mActivityChooserContent = (IcsLinearLayout) findViewById(R.id.abs__activity_chooser_view_content);
    mActivityChooserContentBackground = mActivityChooserContent.getBackground();

    mDefaultActivityButton = (FrameLayout) findViewById(R.id.abs__default_activity_button);
    mDefaultActivityButton.setOnClickListener(mCallbacks);
    mDefaultActivityButton.setOnLongClickListener(mCallbacks);
    mDefaultActivityButtonImage = (ImageView) mDefaultActivityButton.findViewById(R.id.abs__image);

    mExpandActivityOverflowButton = (FrameLayout) findViewById(R.id.abs__expand_activities_button);
    mExpandActivityOverflowButton.setOnClickListener(mCallbacks);
    mExpandActivityOverflowButtonImage = (ImageView) mExpandActivityOverflowButton
            .findViewById(R.id.abs__image);
    mExpandActivityOverflowButtonImage.setImageDrawable(expandActivityOverflowButtonDrawable);

    mAdapter = new ActivityChooserViewAdapter();
    mAdapter.registerDataSetObserver(new DataSetObserver() {
        @Override
        public void onChanged() {
            super.onChanged();
            updateAppearance();
        }
    });

    Resources resources = context.getResources();
    mListPopupMaxWidth = Math.max(resources.getDisplayMetrics().widthPixels / 2,
            resources.getDimensionPixelSize(R.dimen.abs__config_prefDialogWidth));
}

From source file:android.support.design.widget.CustomCollapsingTextHelper.java

private Typeface readFontFamilyTypeface(int resId) {
    final TypedArray a = mView.getContext().obtainStyledAttributes(resId,
            Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN ? new int[] { android.R.attr.fontFamily }
                    : new int[0]);
    try {/*from ww w  .j a  va  2s.  c o m*/
        final String family = a.getString(0);
        if (family != null) {
            return Typeface.create(family, Typeface.NORMAL);
        }
    } catch (Exception e) {
        throw new RuntimeException("Unable to read font family typeface: " + resId);
    } finally {
        a.recycle();
    }
    return null;
}

From source file:android_hddl_framework.viewpagerindicator.LinePageIndicator.java

public LinePageIndicator(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);
    if (isInEditMode())
        return;//w w  w  . j  a v a  2  s  .  c  om

    final Resources res = getResources();

    //Load defaults from resources
    final int defaultSelectedColor = res.getColor(R.color.default_line_indicator_selected_color);
    final int defaultUnselectedColor = res.getColor(R.color.default_line_indicator_unselected_color);
    final float defaultLineWidth = res.getDimension(R.dimen.default_line_indicator_line_width);
    final float defaultGapWidth = res.getDimension(R.dimen.default_line_indicator_gap_width);
    final float defaultStrokeWidth = res.getDimension(R.dimen.default_line_indicator_stroke_width);
    final boolean defaultCentered = res.getBoolean(R.bool.default_line_indicator_centered);

    //Retrieve styles attributes
    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.LinePageIndicator, defStyle, 0);

    mCentered = a.getBoolean(R.styleable.LinePageIndicator_centered, defaultCentered);
    mLineWidth = a.getDimension(R.styleable.LinePageIndicator_lineWidth, defaultLineWidth);
    mGapWidth = a.getDimension(R.styleable.LinePageIndicator_gapWidth, defaultGapWidth);
    setStrokeWidth(a.getDimension(R.styleable.LinePageIndicator_strokeWidth, defaultStrokeWidth));
    mPaintUnselected
            .setColor(a.getColor(R.styleable.LinePageIndicator_unselectedColor, defaultUnselectedColor));
    mPaintSelected.setColor(a.getColor(R.styleable.LinePageIndicator_selectedColor, defaultSelectedColor));

    Drawable background = a.getDrawable(R.styleable.LinePageIndicator_android_background);
    if (background != null) {
        setBackgroundDrawable(background);
    }

    a.recycle();

    final ViewConfiguration configuration = ViewConfiguration.get(context);
    mTouchSlop = ViewConfigurationCompat.getScaledPagingTouchSlop(configuration);
}

From source file:android.support.v7ox.widget.AppCompatSpinner.java

/**
 * Constructs a new spinner with the given context's theme, the supplied
 * attribute set, default styles, popup mode (one of {@link #MODE_DIALOG}
 * or {@link #MODE_DROPDOWN}), and the context against which the popup
 * should be inflated./*from  w  w  w  . j av  a2 s .c o m*/
 *
 * @param context      The context against which the view is inflated, which
 *                     provides access to the current theme, resources, etc.
 * @param attrs        The attributes of the XML tag that is inflating the view.
 * @param defStyleAttr An attribute in the current theme that contains a
 *                     reference to a style resource that supplies default
 *                     values for the view. Can be 0 to not look for
 *                     defaults.
 * @param mode         Constant describing how the user will select choices from
 *                     the spinner.
 * @param popupTheme   The theme against which the dialog or dropdown popup
 *                     should be inflated. May be {@code null} to use the
 *                     view theme. If set, this will override any value
 *                     specified by
 *                     {@link R.styleable#Spinner_popupTheme}.
 * @see #MODE_DIALOG
 * @see #MODE_DROPDOWN
 */
public AppCompatSpinner(Context context, AttributeSet attrs, int defStyleAttr, int mode,
        Resources.Theme popupTheme) {
    super(context, attrs, defStyleAttr);

    TintTypedArray a = TintTypedArray.obtainStyledAttributes(context, attrs, R.styleable.Spinner, defStyleAttr,
            0);

    mDrawableManager = AppCompatDrawableManager.get();
    mBackgroundTintHelper = new AppCompatBackgroundHelper(this, mDrawableManager);

    if (popupTheme != null) {
        mPopupContext = new ContextThemeWrapper(context, popupTheme);
    } else {
        final int popupThemeResId = a.getResourceId(R.styleable.Spinner_popupTheme, 0);
        if (popupThemeResId != 0) {
            mPopupContext = new ContextThemeWrapper(context, popupThemeResId);
        } else {
            // If we're running on a < M device, we'll use the current context and still handle
            // any dropdown popup
            mPopupContext = !IS_AT_LEAST_M ? context : null;
        }
    }

    if (mPopupContext != null) {
        if (mode == MODE_THEME) {
            if (Build.VERSION.SDK_INT >= 11) {
                // If we're running on API v11+ we will try and read android:spinnerMode
                TypedArray aa = null;
                try {
                    aa = context.obtainStyledAttributes(attrs, ATTRS_ANDROID_SPINNERMODE, defStyleAttr, 0);
                    if (aa.hasValue(0)) {
                        mode = aa.getInt(0, MODE_DIALOG);
                    }
                } catch (Exception e) {
                    Log.i(TAG, "Could not read android:spinnerMode", e);
                } finally {
                    if (aa != null) {
                        aa.recycle();
                    }
                }
            } else {
                // Else, we use a default mode of dropdown
                mode = MODE_DROPDOWN;
            }
        }

        if (mode == MODE_DROPDOWN) {
            final DropdownPopup popup = new DropdownPopup(mPopupContext, attrs, defStyleAttr);
            final TintTypedArray pa = TintTypedArray.obtainStyledAttributes(mPopupContext, attrs,
                    R.styleable.Spinner, defStyleAttr, 0);
            mDropDownWidth = pa.getLayoutDimension(R.styleable.Spinner_android_dropDownWidth,
                    LayoutParams.WRAP_CONTENT);

            popup.setPromptText(a.getString(R.styleable.Spinner_android_prompt));
            pa.recycle();

            mPopup = popup;
            mForwardingListener = new ListPopupWindow.ForwardingListener(this) {
                @Override
                public ListPopupWindow getPopup() {
                    return popup;
                }

                @Override
                public boolean onForwardingStarted() {
                    if (!mPopup.isShowing()) {
                        mPopup.show();
                    }
                    return true;
                }
            };
        }
    }

    final CharSequence[] entries = a.getTextArray(R.styleable.Spinner_android_entries);
    if (entries != null) {
        final ArrayAdapter<CharSequence> adapter = new ArrayAdapter<>(context,
                R.layout.support_simple_spinner_dropdown_item, entries);
        adapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
        setAdapter(adapter);
    }

    a.recycle();

    mPopupSet = true;

    // Base constructors can call setAdapter before we initialize mPopup.
    // Finish setting things up if this happened.
    if (mTempAdapter != null) {
        setAdapter(mTempAdapter);
        mTempAdapter = null;
    }

    mBackgroundTintHelper.loadFromAttributes(attrs, defStyleAttr);
}

From source file:android.support.design.widget.SubtitleCollapsingTextHelper.java

private Typeface readFontFamilyTypeface(int resId) {
    final TypedArray a = mView.getContext().obtainStyledAttributes(resId,
            android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN
                    ? new int[] { android.R.attr.fontFamily }
                    : new int[0]);
    try {// w w w  .ja  v  a2s .c o  m
        final String family = a.getString(0);
        if (family != null) {
            return Typeface.create(family, Typeface.NORMAL);
        }
    } catch (Exception e) {
        throw new RuntimeException("Unable to read font family typeface: " + resId);
    } finally {
        a.recycle();
    }
    return null;
}

From source file:android.support.v7.widget.AppCompatSpinner.java

/**
 * Constructs a new spinner with the given context's theme, the supplied
 * attribute set, default styles, popup mode (one of {@link #MODE_DIALOG}
 * or {@link #MODE_DROPDOWN}), and the context against which the popup
 * should be inflated./*from  ww w .  ja  v a2  s.  c o  m*/
 *
 * @param context      The context against which the view is inflated, which
 *                     provides access to the current theme, resources, etc.
 * @param attrs        The attributes of the XML tag that is inflating the view.
 * @param defStyleAttr An attribute in the current theme that contains a
 *                     reference to a style resource that supplies default
 *                     values for the view. Can be 0 to not look for
 *                     defaults.
 * @param mode         Constant describing how the user will select choices from
 *                     the spinner.
 * @param popupTheme   The theme against which the dialog or dropdown popup
 *                     should be inflated. May be {@code null} to use the
 *                     view theme. If set, this will override any value
 *                     specified by
 *                     {@link R.styleable#Spinner_popupTheme}.
 * @see #MODE_DIALOG
 * @see #MODE_DROPDOWN
 */
public AppCompatSpinner(Context context, AttributeSet attrs, int defStyleAttr, int mode,
        Resources.Theme popupTheme) {
    super(context, attrs, defStyleAttr);

    TintTypedArray a = TintTypedArray.obtainStyledAttributes(context, attrs, R.styleable.Spinner, defStyleAttr,
            0);

    mDrawableManager = AppCompatDrawableManager.get();
    mBackgroundTintHelper = new AppCompatBackgroundHelper(this, mDrawableManager);

    if (popupTheme != null) {
        mPopupContext = new ContextThemeWrapper(context, popupTheme);
    } else {
        final int popupThemeResId = a.getResourceId(R.styleable.Spinner_popupTheme, 0);
        if (popupThemeResId != 0) {
            mPopupContext = new ContextThemeWrapper(context, popupThemeResId);
        } else {
            // If we're running on a < M device, we'll use the current context and still handle
            // any dropdown popup
            mPopupContext = !IS_AT_LEAST_M ? context : null;
        }
    }

    if (mPopupContext != null) {
        if (mode == MODE_THEME) {
            if (Build.VERSION.SDK_INT >= 11) {
                // If we're running on API v11+ we will try and read android:spinnerMode
                TypedArray aa = null;
                try {
                    aa = context.obtainStyledAttributes(attrs, ATTRS_ANDROID_SPINNERMODE, defStyleAttr, 0);
                    if (aa.hasValue(0)) {
                        mode = aa.getInt(0, MODE_DIALOG);
                    }
                } catch (Exception e) {
                    Log.i(TAG, "Could not read android:spinnerMode", e);
                } finally {
                    if (aa != null) {
                        aa.recycle();
                    }
                }
            } else {
                // Else, we use a default mode of dropdown
                mode = MODE_DROPDOWN;
            }
        }

        if (mode == MODE_DROPDOWN) {
            final DropdownPopup popup = new DropdownPopup(mPopupContext, attrs, defStyleAttr);
            final TintTypedArray pa = TintTypedArray.obtainStyledAttributes(mPopupContext, attrs,
                    R.styleable.Spinner, defStyleAttr, 0);
            mDropDownWidth = pa.getLayoutDimension(R.styleable.Spinner_android_dropDownWidth,
                    LayoutParams.WRAP_CONTENT);
            popup.setBackgroundDrawable(pa.getDrawable(R.styleable.Spinner_android_popupBackground));
            popup.setPromptText(a.getString(R.styleable.Spinner_android_prompt));
            pa.recycle();

            mPopup = popup;
            mForwardingListener = new ForwardingListener(this) {
                @Override
                public ShowableListMenu getPopup() {
                    return popup;
                }

                @Override
                public boolean onForwardingStarted() {
                    if (!mPopup.isShowing()) {
                        mPopup.show();
                    }
                    return true;
                }
            };
        }
    }

    final CharSequence[] entries = a.getTextArray(R.styleable.Spinner_android_entries);
    if (entries != null) {
        final ArrayAdapter<CharSequence> adapter = new ArrayAdapter<>(context,
                android.R.layout.simple_spinner_item, entries);
        adapter.setDropDownViewResource(R.layout.support_simple_spinner_dropdown_item);
        setAdapter(adapter);
    }

    a.recycle();

    mPopupSet = true;

    // Base constructors can call setAdapter before we initialize mPopup.
    // Finish setting things up if this happened.
    if (mTempAdapter != null) {
        setAdapter(mTempAdapter);
        mTempAdapter = null;
    }

    mBackgroundTintHelper.loadFromAttributes(attrs, defStyleAttr);
}

From source file:android.support.design.widget.SheetBehavior.java

/**
 * Default constructor for inflating BottomSheetBehaviors from layout.
 *
 * @param context The {@link Context}./*from www .ja v a  2 s .  c  o  m*/
 * @param attrs   The {@link AttributeSet}.
 */
public SheetBehavior(Context context, AttributeSet attrs) {
    super(context, attrs);
    TypedArray a = context.obtainStyledAttributes(attrs, R.styleable.SheetBehavior);
    setPeekHeight(a.getDimensionPixelSize(R.styleable.SheetBehavior_peekHeight, 0));
    setHideable(a.getBoolean(R.styleable.SheetBehavior_hiddenEnable, false));
    mSlideModel = a.getInt(R.styleable.SheetBehavior_slideMode, BOTTOM_SHEET);
    a.recycle();
    ViewConfiguration configuration = ViewConfiguration.get(context);
    mMaximumVelocity = configuration.getScaledMaximumFlingVelocity();
}

From source file:com.abcs.haiwaigou.yyg.view.ReadMoreTextView.java

public ReadMoreTextView(Context context, AttributeSet attrs) {
    super(context, attrs);
    TypedArray typedArray = context.obtainStyledAttributes(attrs, R.styleable.ReadMoreTextView);
    this.trimLength = typedArray.getInt(R.styleable.ReadMoreTextView_trimLength, DEFAULT_TRIM_LENGTH);
    int resourceIdTrimCollapsedText = typedArray.getResourceId(R.styleable.ReadMoreTextView_trimCollapsedText,
            R.string.read_more);/*w  w  w .  j a v a2s.  co  m*/
    int resourceIdTrimExpandedText = typedArray.getResourceId(R.styleable.ReadMoreTextView_trimExpandedText,
            R.string.read_less);
    this.trimCollapsedText = getResources().getString(resourceIdTrimCollapsedText);
    this.trimExpandedText = getResources().getString(resourceIdTrimExpandedText);
    this.trimLines = typedArray.getInt(R.styleable.ReadMoreTextView_trimLines, DEFAULT_TRIM_LINES);
    this.colorClickableText = typedArray.getColor(R.styleable.ReadMoreTextView_colorClickableText,
            ContextCompat.getColor(context, R.color.tljr_statusbarcolor));
    this.showTrimExpandedText = typedArray.getBoolean(R.styleable.ReadMoreTextView_showTrimExpandedText,
            DEFAULT_SHOW_TRIM_EXPANDED_TEXT);
    this.trimMode = typedArray.getInt(R.styleable.ReadMoreTextView_trimMode, TRIM_MODE_LINES);
    typedArray.recycle();
    viewMoreSpan = new ReadMoreClickableSpan();
    onGlobalLayoutLineEndIndex();
    setText();
}

From source file:jp.co.ipublishing.esnavi.views.MarqueeView.java

/**
 * (XML??)//w  w w  .java2 s  . c om
 *
 * @param context 
 * @param attrs   XML???
 */
public MarqueeView(Context context, AttributeSet attrs) {
    super(context, attrs);

    initMarqueeView();

    // XML??
    final TypedArray attributes = context.obtainStyledAttributes(attrs, R.styleable.MarqueeView);

    final String marqueeText = attributes.getString(R.styleable.MarqueeView_marquee_text);
    if (marqueeText != null) {
        setText(marqueeText);
    }

    final int textSize = attributes.getDimensionPixelOffset(R.styleable.MarqueeView_marquee_textSize, 0);
    if (textSize > 0) {
        setTextSize(textSize);
    }

    final int padding = attributes.getDimensionPixelOffset(R.styleable.MarqueeView_marquee_padding, 0);
    if (padding > 0) {
        setPadding(padding, padding, padding, padding);
    }

    setTextColor(attributes.getColor(R.styleable.MarqueeView_marquee_textColor, 0xFFFFFFFF));
    setBackgroundColor(attributes.getColor(R.styleable.MarqueeView_marquee_background, 0xFF000000));
    setRepeatLimit(attributes.getInteger(R.styleable.MarqueeView_marquee_repeatLimit, 1));
    setTextMoveSpeed(attributes.getInteger(R.styleable.MarqueeView_marquee_textMoveSpeed, 5));

    attributes.recycle();
}