我的同事最近遇到了一个有趣的问题。下面这个非常简单的布局将向我们展示一些关于Android测量系统的有趣发现。预期的运行结果应该显示带有彩色背景的文本。但实际上,你根本看不到背景ImageView:问题的根源在于测量。因为我们使用的是颜色而不是图像,所以ImageView自然会假定其宽度和高度为零。颜色(或ColorDrawables)没有图像的实际大小,并且ImageView不大于其背景或图像源。有趣的是,我们可以想出很多方法来解决这个问题。每个解决方案都揭示了测量系统的一些新方面。从直观的角度依次理解:设置父布局FrameLayout为match_parent。这样ImageView就可以知道具体的大小来填充父视图了。使用View而不是ImageView。View会扩展以填充空间,而ImageView不会。使用RelativeLayout而不是FrameLayout。相对布局以不同方式测量子视图。将TextView的宽度或高度设置为match_parent。这是一个非常混乱的方法。它之所以有效,是因为如果FrameLayout有一个或多个使用match_parent的子视图,则会完成另一项测量。理解而不是简单地解决这个问题需要反复阅读FrameLayout.onMeasure()和ImageView.onMeasure()代码。面对这样的问题,Android是一个开源项目让我很高兴。这个问题的核心是你不应该仅仅为了显示颜色而使用ImageView。使用有背景的View会更靠谱。显然,上面的布局并没有什么实际意义,大家一般都是为TextView设置背景。不过,这是说明这一点的简单方法。原文链接:danlew翻译链接:http://blog.jobbole.com/68745/