Android之requestLayout、invalidate与postInvalidate


在 Android 开发中,requestLayout、invalidate 和 postInvalidate 是用于更新视图(View)的方法。它们的作用和触发时机有所不同.

requestLayout

作用

requestLayout 用于请求重新测量和布局视图。调用这个方法后,系统会重新调用视图的测量(measure)、布局(layout)过程。

触发时机

  • 当视图的大小或形状发生变化时需要调用。
  • 当视图的布局参数(如宽度、高度、边距等)发生变化时需要调用。
  view.requestLayout()

注意事项

  • requestLayout 会触发整个视图树的重新布局,可能会影响性能,因此应谨慎使用。

invalidate

作用

invalidate 用于请求重新绘制视图。调用这个方法后,系统会在下一个绘制周期重新调用视图的 onDraw 方法。

触发时机

当视图的内容发生变化,需要重新绘制时调用。

view.invalidate()

注意事项

  • invalidate 只会重绘当前视图,不会影响视图的测量和布局过程。
  • 只能在主线程中调用。

postInvalidate

作用

postInvalidate 也是用于请求重新绘制视图,但它可以在非 UI 线程中调用。调用这个方法后,系统会在下一个绘制周期重新调用视图的 onDraw 方法。

触发时机

当需要在非 UI 线程中请求视图重绘时调用。

 view.postInvalidate()

注意事项

  • postInvalidate 通过将重新绘制请求放入消息队列来实现线程安全
  • 与 invalidate 不同,它可以在任何线程中调用

总结

  • requestLayout:请求重新测量和布局视图,影响整个视图树的布局过程。通常在视图大小或布局参数变化时调用。
  • invalidate:请求重新绘制视图,只影响当前视图的绘制过程。只能在主线程中调用。
  • postInvalidate:请求重新绘制视图,允许在非主线程中调用,通过消息队列实现线程安全

在这里插入图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值