测量方法&属性

获取view的宽高属性

View.getMeasuredWidth()         //获取测量的宽高
View.getLayoutParams().width    //通过xml布局文件layout属性,来获取宽高属性
View.getWidth()                 //获取测量好的宽高

使用时机

View.getMeasuredWidth()         //onMeasure()方法之后(包含此方法)
View.getLayoutParams().width    //onMeasure()方法之后(包含此方法)
View.getWidth()                 //onSizeChanged()方法之后(包含此方法)

些许bug

View.getMeasuredWidth()         //一般情况下测量很准确,但是如果view最外层的xml有background背景图片,系统测量时会参考background图片的大小,可能会造成测量不准确
View.getLayoutParams().width    //xml没有明确的dp值,根据属性可能有值: -1(LayoutParams.MATCH_PARENT=-1),-2(LayoutParams.WRAP_CONTENT=-2)
View.getWidth()                 //一般没有坑

View.getLayoutParams()

onFinishInflate()执行时,还未载入xml布局文件,此时调用View.getLayoutParams()会造成空指针异常

View.getLeft()

View.getLeft()参照最近一次layout()布局,如果布局不变,使用scrollTo()方法移动view,系统也判定view的布局未改,View.getLeft()值也不变

scrollTo()

此方法并不真正改变view的layout(left,top,right,buttom)布局,只是让我们看到view能够移动,在系统中view的布局不变

onLayout()

此方法一般被调用2次

recyclerView条目要使用一下方式解析xml布局,否则最外层的控件宽度高度不生效

View view = LayoutInflater.from(parent.getContext()).inflate(R.layout.item, parent,false);

事件传递至少应当有 ACTION_DOWN

  • dispatchTouchEvent()
MotionEvent传递 ACTION_DOWN ACTION_MOVE
  • onInterceptTouchEvent()
MotionEvent传递 ACTION_DOWN 
  • onTouchEvent()
MotionEvent传递 ACTION_DOWN ACTION_MOVE
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

友情链接更多精彩内容