【问题标题】:Does addView() invoke onMeasure() for all childs?addView() 是否为所有孩子调用 onMeasure()?
【发布时间】:2026-02-04 21:15:01
【问题描述】:

是否将子级添加到 ViewGroup(通过 ViewGroup.addView() )会自动为所有子级调用 onMeasure() ?

【问题讨论】:

  • 你能不能通过做一些日志记录或使用断点来尝试它?

标签: android view viewgroup


【解决方案1】:

ViewGroup 应该通过首先测量所有孩子来测量它的宽度和高度。如果ViewGroup 的宽度或高度是wrap_content,它肯定会为所有孩子调用onMeasure()。不能这么说match_parent。可以肯定的一件事是addView() 调用requestLayout(),这将重新计算布局子级对所有子级调用layout(l, t, r, b) 的位置。

要确定它是否调用,您可以创建自定义 View 并将每次调用记录到 onMeasure() 并将它们添加到 ViewGroup。可能是不同的ViewGroup 实现会有不同的行为。

【讨论】:

    最近更新 更多