美文网首页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