当我检查QuickContactBadge
中的FrameLayout
时,发现以下代码:
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();
}
我并没有真正理解
defstyle
中0
和obtainStyledAttributes()
参数的含义。我查过参考资料,但还是不知道它的用途。 最佳答案
documentation解释得很清楚,你看到这部分了吗:
defstyleattr当前主题中的一个属性,包含对样式资源的引用,该样式资源为styledattributes提供默认值。可以为0以不查找默认值。
DefStyleRes样式资源的资源标识符,为StyledAttributes提供默认值,仅当DefStyleAttr为0或在主题中找不到时使用。可以为0以不查找默认值。
“可以为0不查找默认值。”如果将此设置为0,则不会尝试获取样式属性的默认值。这看起来有点违反直觉,如果你能输入一个0,为什么要重载这个方法…但我认为这样做是为了告诉它不要在defStyleAttr
中查找默认值,而是告诉它在defStyleRes
中查找默认值,反之亦然。
关于android - context.obtainStyledAttributes()中的defStyleAttr和defStyleRes用于什么?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/6784854/