view没有设置android:minWidth的属性,那么view的宽度应该等于0,而实际getwidth不等于0,为什么会呢? 1C

view onMeasure的源码如下:
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
setMeasuredDimension(getDefaultSize(getSuggestedMinimumWidth(), widthMeasureSpec),
getDefaultSize(getSuggestedMinimumHeight(), heightMeasureSpec));
}
getDefaultSize(int size, int measureSpec)的源码如下:
public static int getDefaultSize(int size, int measureSpec) {
int result = size;
int specMode = MeasureSpec.getMode(measureSpec);
int specSize = MeasureSpec.getSize(measureSpec);

    switch (specMode) {
    case MeasureSpec.UNSPECIFIED:
        result = size;
        break;
    case MeasureSpec.AT_MOST:
    case MeasureSpec.EXACTLY:
        result = specSize;
        break;
    }
    return result;
}

getSuggestedMinimumWidth的源码如下:
protected int getSuggestedMinimumWidth() {
return (mBackground == null) ? mMinWidth : max(mMinWidth, mBackground.getMinimumWidth());
}
mMinWidth 是android:minWidth的属性,mBackground.getMinimumWidth()是background的width。
按照上述的源码进行测量,在MeasureSpec.AT_MOST和MeasureSpec.AT_MOST 两种模式测量下,view的宽度都应该等于getSuggestedMinimumWidth。如果view没有设置background和android:minWidth的属性,那么view的宽度应该等于0;而实际getwidth的宽度等于viewgroup的宽度。为什么会这样呢?

1个回答

Bill_xiao
Bill_xiao 我的view没有设置background和android:minWidth的属性,测量模式match_parent。getSuggestedMinimumWidth应该为0,那么view的宽度也就为0了,实际测量view的宽度为viewgroup的宽度。能说说为什么?
3 年多之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
立即提问
相关内容推荐