invalidate() 和 requestLayout()

在Android UI开发中,`invalidate()` 和 `requestLayout()` 是两个不同的方法,用于处理视图更新的不同方面:

**`invalidate()`**
- 当视图的外观(如颜色、图形、图像等)发生改变,但不涉及视图尺寸或位置的变化时,应当调用 `invalidate()` 方法。
- 这个方法会导致视图的部分或全部区域被标记为“dirty”(无效),随后系统会在下一个绘图周期中调用 `onDraw()` 方法重绘视图内容。

**`requestLayout()`**
- 当视图的大小或者位置需要根据内部状态或外部条件重新计算时,需要调用 `requestLayout()` 方法。
- 调用此方法不仅会导致当前视图重新布局,还会递归地通知所有父视图它们也需要重新布局,从而引发整个视图树从上至下进行布局计算,这包括 measure 和 layout 两个阶段。
- 常见应用场景有:视图的尺寸因为内容增加而需要扩大,或者视图的位置由于约束条件变化而需要移动等。

总结一下:
- 如果只是视图内容发生了变化,不影响视图尺寸和位置,使用 `invalidate()`。
- 如果视图的尺寸或位置需要改变,则应调用 `requestLayout()`,同时,由于布局变更通常也会引起内容变化,所以调用 `requestLayout()` 后系统一般会自动跟进 `invalidate()` 更新显示内容。

  • 9
    点赞
  • 10
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值