当我检查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();
}

我并没有真正理解defstyle0obtainStyledAttributes()参数的含义。我查过参考资料,但还是不知道它的用途。

最佳答案

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/

10-09 10:06