requestLayout和invalidate

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

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

相关阅读更多精彩内容

友情链接更多精彩内容