Android ViewManager解读之requestLayout() 详解

本文详细探讨了Android中requestLayout()的过程,从TextView.requestLayout()开始,经由ViewRoot.requestLayout(),scheduleTraversals(),再到performTraversals(),解释了requestLayout()如何触发视图的重新布局和绘制。尽管invalidate()和requestLayout()都会导致重绘,但requestLayout()会执行完整的测量、布局和绘制流程,而invalidate()则不重新测量。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

         尊重原创: http://blog.csdn.net/sk719887916/article/details/48464035

          上篇Android View 中invalidate() 你所不知道的那些事主要了解了view重绘的整个流程,通过从源码的学习大家了解了view整个invalidate的整个流程,但是上篇中view的另一个重要方法 requestLayout()没做细说,本篇继续分析requestLayout()。


        上文中细说了从view.invalidate()开始到view.draw()的整个过程,当然今天也从view.requestLayout()开始分析起。


      requestLayout过程


          顾名思义,本代码从方法名字理解为请求布局,此方法主要是将本view重新布局 ,然后绘制。当我们从某个view中调用 view.requestLayout()时,会触发super的requestLayout(),也就是整个View的invalidate(),经过判断后响应ViewParent的requestLayout(),接着获取ViewRootImpl实列调用其本身的requestLayout() ,通过执行scheduleTraversals();发送消息 ,然后ViewRoot的hander处理performTraversals(),从而做出重绘draw()动作 ,,最终还是和invalidate()执行到同一个方法上,现在我就从源码分析起


    1  TextView.requestLayout()

         具体某个控件 可以调用此方法,则可以让本View重新走一边测量,布局,以及绘制流程,他会调用父类的(也就是View)的requestLayout()方法,可以看下如下代码

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值