美文网首页Android备忘录
requestLayout和invalidate

requestLayout和invalidate

作者: wIsper | 来源:发表于2016-06-24 20:08 被阅读187次
requestLayout&invalidate.jpg

如果View确定自身不再适合当前区域,比如说它的LayoutParams发生了改变,需要父布局对其进行重新测量、布局、绘制这三个流程,使用requestLayout。而invalidate则是刷新当前View,使当前View进行重绘,不会进行测量、布局流程

postInvalidate法与invalidate方法的作用是一样的,都是使View树重绘,postInvalidate是在非UI线程中调用,invalidate则是在UI线程中调用

invalidate方法感觉起来好像很重,其实setVisibility(), setText()等方法都是会调用invalidate来重绘draw

ListView,Recyclerview的使用中,因为它们会缓存Item的布局,如果布局设置了weight=1类似的属性,那么效果看起来就不符合预期,这时需要weight=1的控件调用requestLayout()来重新测量一下宽度

参考:
Android View 深度分析requestLayout、invalidate与postInvalidate

相关文章

网友评论

    本文标题:requestLayout和invalidate

    本文链接:https://www.haomeiwen.com/subject/haoodttx.html