sda*_*bet 163 android android-layout android-view
我有点困惑的角色forceLayout(),requestLayout()以及invalidate()该方法的View类.
他们何时被召唤?
Bar*_*ski 329
为了更好地理解FrançoisBOURLIEUX和Dalvik提供的答案,我建议您看看Arpit Mathur的这个令人敬畏的视图生命周期图:

Sur*_*gch 113
invalidate()invalidate()当您想要重新绘制视图时,将进行调用.它onDraw最终会被调用(很快,但不会立即).自定义视图调用它的示例是文本或背景颜色属性发生更改时的示例.
视图将被重绘,但大小不会改变.
requestLayout()如果您的视图的某些内容发生变化会影响大小,那么您应该致电requestLayout().这将触发onMeasure并且onLayout不仅针对此视图,而且针对父视图一直向上触发.
呼叫requestLayout()是不能保证导致onDraw(相反的是在公认的答案图暗示),因此它通常是与结合invalidate().
invalidate();
requestLayout();
Run Code Online (Sandbox Code Playgroud)
例如,自定义标签的文本属性已更改.标签会改变尺寸,因此需要重新测量和重新绘制.
forceLayout()如果requestLayout()在父视图组上调用了该视图,则无需重新测量并重新传输其子视图.但是,如果孩子应该被包括在重新测量和重新布局中,那么你可以打电话forceLayout()给孩子.forceLayout()仅适用于requestLayout()与其直接父母一起发生的儿童.单独调用forceLayout()将不起作用,因为它不会触发requestLayout()视图树.
阅读此问答以获取更详细的说明forceLayout().
View 源代码Fra*_*EUX 25
在这里您可以找到一些回复:http: //developer.android.com/guide/topics/ui/how-android-draws.html
对我来说,调用invalidate()只刷新视图和调用requestLayout()刷新视图并计算屏幕上视图的大小.
invalidate()--->onDraw()来自 UI 线程
postInvalidate()--->onDraw()来自后台线程
requestLayout()--->onMeasure()并且onLayout()并且不一定 onDraw()
forceLayout()--->onMeasure()并且onLayout() 只要直接父级调用requestLayout().
| 归档时间: |
|
| 查看次数: |
82757 次 |
| 最近记录: |