Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

What does defStyleAttr and defStyleRes in context.obtainStyledAttributes() used for?

Tags:

android

When I check QuickContactBadge in FrameLayout, I found following code:

 public QuickContactBadge(Context context, AttributeSet attrs, int defStyle) {
    super(context, attrs, defStyle);

    TypedArray a =
        context.obtainStyledAttributes(attrs,
                com.android.internal.R.styleable.QuickContactBadge, defStyle, 0);

    mMode = a.getInt(com.android.internal.R.styleable.QuickContactBadge_quickContactWindowSize,
            QuickContact.MODE_MEDIUM);

    a.recycle();

    init();

    mBadgeBackground = getBackground();
}

I don't really catch the meaning of defstyle and 0 parameter in obtainStyledAttributes(). I have looked up reference, but still don't know what it used for.

like image 823
Frank Cheng Avatar asked Jul 22 '11 01:07

Frank Cheng


1 Answers

The documentation says:

defStyleAttr An attribute in the current theme that contains a reference to a style resource that supplies defaults values for the StyledAttributes. Can be 0 to not look for defaults.

defStyleRes A resource identifier of a style resource that supplies default values for the StyledAttributes, used only if defStyleAttr is 0 or can not be found in the theme. Can be 0 to not look for defaults.

"Can be 0 to not look for defaults." If you set this to 0 then it's not going to try to grab default values for the style attributes. It does seem a little counter-intuitive, why overload this method if you can just pass in a 0... but I think it is so you can tell it not to look in defStyleAttr for defaults but do tell it to look in defStyleRes for defaults, and vice versa.

like image 113
citizen conn Avatar answered Nov 06 '22 16:11

citizen conn