Layout

1、源码

①设定了子view的位置

layout()方法用于确定view自己本身在父布局中的位置,onLayout()方法用于确定子view的位置



如果大小发生了变化,则重新布局





②setOpticalFrame内部也是调用了setFrame方法,设置了子view的位置



③将传进来的左、上、右、下的值与原来的值做对比,只要有其中任意一对不等,就说明view的大小发生了变化


④onLayout是一个空实现。在layout方法中去调用了onLayout用于指定子view的大小和位置。只有在viewgroup中才有onLayout




而viewgroup中onLayout不仅是一个空方法,而且还是一个抽象的。抽象的方法,说明viewgroup的子类都必须重写这个方法,在这个方法内依据自己的规则来实现布局


2、



①一般情况下只获取一次,但是在滑动等情况下系统会多次测量,所以在onMeasure()中获取view测量后的宽和高不一定特别准确,因为被测量了多次。为了避免这种情况,在onMeasure()的下一个阶段onLayout()中去获得测量过的结果

②获取时间不同,在measure结束之后就可以通过getMeasuredWidth()获取测量的大小,getWidth()是在layout结束之后调用该方法获得实际的大小

返回的计算方式是不同的,getMeasuredWidth()返回值是根据setWidthDimension()决定的,getWidth()由控件的右坐标值减左坐标值计算出来的




view.getLeft():子view左边距离父控件左边的距离

view.getRight():子view右边距离父控件左边的距离

view.getTop():子view上边距离父控件上边的距离

view.getBottom():子view下边距离父控件上边的距离

getRight()-getLeft()=宽

getBottom()-getTop()=高


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值