关于View的知识

  • 1.view的getWidth和getmeasureWidth的区别

    结论:getwidith拿到的是在layout之后,根据view的四个点计算出来的宽度,而getmeasureWidth是view原本的宽度。这2个方法一般来讲得到的数据是不会不同的,只有可能在onmeasure和layout之后,手动调用了measure(0,0)才会可能导致数据不一样。
    在这里插入图片描述
    在这里插入图片描述
    这2个方法都是简单的赋值操作,具体的行为发生在onmeasure和layout里。
    在这里插入图片描述
    在onmeasure里,调用了setMeasureDimension,里面的getDefaultSize的方法,根据MeasureSpec返回相应的数值。
    在这里插入图片描述
    在setMeasureDimension里,根据getDefaultSize里返回的值,进行计算得出新值。
    在这里插入图片描述
    最后对成员变量进行赋值操作。这里就得到了getMeausreWidth的值。

在这里插入图片描述

layout里调用了setFrame,在setFrame里对left,right等四个点进行了赋值。
在这里插入图片描述

  • 2 在oncreate里怎么获取view的宽高。
  • (1)view.post
  • (2)windowFouceChange
  • (3)addOnGlobalLoayoutListener
  • (4)view.measure(0,0)之后再调用getMeasureWidth就能拿到值
  • (5)为什么view.measure(0,0)之后能拿到值
  • 在这里插入图片描述
    这个方法接受的两个参数,是关于view的测量方式,这里不谈,总之传了0,0代表测量方式为UNSPECIFIED.然后会调用onmeasure方法。在这里插入图片描述
    在onmeasure方法里面会走之前的流程,也就会对mMeasureWidth赋值,所以之后调用getMeasureWidth方法就能拿到view的宽度。
    ps:如果是自定义view,在onmeasure方法里,你根据测量方式进行了测量的更改,那么measure(0,0)之后可能会导致数据不对。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值