Android中fill_parent与match_parent的区别

Android中fill_parent与match_parent的区别

今天在下载一demo时,发现里面layout都使用的是fill_parent,而我之前一直用的都是match_parent,应该大多数朋友在开发时使用的是match_parent,那么他们之间有什么不同?带着这个问题我去读了Android的源码。结果我发现,他们就是一个东西。然后我就看了下资料,发现在Android2.2以后,Android将所有的fill_parent通过映射变为match_parent,而在Android2.2之前是没有match_parent方法的。所以说他们本质上其实就是一个东西
下面就是源码里比较他们之间的关系:

public static int getChildMeasureSpec(int spec, int padding, int childDimension) {
        ...
        //根据当前选择的Mode做相应处理
        switch (specMode) {
        case MeasureSpec.EXACTLY:

        //若childDimension = wrap_content。size赋予测出的大小,mode设置为AT_MOST。
            //根据childDimension获取子view对应的MeasureSpec。
            if (childDimension >= 0) {
                //有具体值,布局具体到具体值。
                resultSize = childDimension;
                resultMode = MeasureSpec.EXACTLY;
            } else if (childDimension == LayoutParams.MATCH_PARENT) {
                // match_parent,就把父控件的大小赋值给子view,并且mode设置为精确的大小EXACTLY。
                resultSize = size;
                resultMode = MeasureSpec.EXACTLY;
            } else if (childDimension == LayoutParams.WRAP_CONTENT) {
                // wrap_content,那么父控件的值赋予子控件,mode设置为AT_MOST,最大不能超过这个设置的数值。
                resultSize = size;
                resultMode = MeasureSpec.AT_MOST;
            }
            break;
        case MeasureSpec.AT_MOST:
           ...
            break
           ...
        }
        //将上面测量好的 MeasureSpec(包含resultSize以及resultMode)值返回。
        return MeasureSpec.makeMeasureSpec(resultSize, resultMode);
    }

可以看到,源码中只有match_parent和wrap_content两种情况,并只对这两种情况做了处理,并没有发现fill_parent。其实是android2.2之后就是把fill_parent改名为了match_panrent。所以他们的效果是一样的。
最后贴出在SDK中的描述:
(1)fill_parent -1 The view should be as big as its parent (minus padding). This constant is deprecated starting from API Level 8 and is replaced by match_parent.
(2)match_parent -1 The view should be as big as its parent (minus padding). Introduced in API Level 8.
(3)wrap_content -2 The view should be only big enough to enclose its content (plus padding).

你可能感兴趣的:(Android中fill_parent与match_parent的区别)