View测量大小的影响因素汇总

本文探讨了Android中父View的match_parent和wrap_content属性如何影响子View的测量过程。通过查看源码,总结出子View测量模式受到父View MeasureSpec、自身LayoutParams以及padding和margin等因素的影响。当子View没有固定宽高时,若父View为AT_MOST,子View也将为AT_MOST。而父View为EXACTLY且子View为match_parent时,子View会根据剩余空间调整大小。
摘要由CSDN通过智能技术生成

之前面试的时候遇到一道问题,父View的属性(match_parent和wrap_content)对测量子view的影响,当时很蒙,没有回答上来,最近在看View源码的时候发现里面早已给出了标准答案,

先上源码

public static int getChildMeasureSpec(int spec, int padding, int childDimension) {

    //父View的宽/高测量模式
    int specMode = MeasureSpec.getMode(spec);
    //父View的宽/高大小
    int specSize = MeasureSpec.getSize(spec);

    //父View剩下的可用区域
    int size = Math.max(0, specSize - padding);

    int resultSize = 0;
    int resultMode = 0;

    switch (specMode) {
    //父View_EXACTLY
    case MeasureSpec.EXACTLY:
        //如果子View写si了宽/高
        if (childDimension >= 0) {
            //子View的MeasureSpec=EXACTLY+写si的宽/高(si说多了不吉利)
            resultSize = childDimension;
            resultMode = MeasureSpec.EXACTLY;
        } else if (childDimension == LayoutParams.MATCH_PARENT) {
            //子View的MeasureSpec=EXACTLY+父View剩下的区域
            resultSize = size
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值