Android中的fill_parent如何实际工作?

时间:2017-05-01 19:33:51

标签: android android-layout

我在 fill_parent 中看到很有价值,我想自己实现它,所以我可以做的不仅仅是填充剩余的空间(例如:填充剩余空间的80%)等等。)

fill_parent如何实际工作?就像它如何计算剩余空间一样,它在运行时如何工作等等。

我过去曾对fill_parent做过类似的事情,根据当前的屏幕大小计算元素占用的空间,元素占用的屏幕数量等,但是我想知道Android如何使用fill_parent

2 个答案:

答案 0 :(得分:6)

尝试创建自定义视图或ViewGroup,您会发现。

将视图带到您的屏幕有三个阶段:

  • 测量
  • 布局
  • 绘制

在测量中,父母会告诉孩子有多少空间可用。它可以针对childs布局参数执行此操作。因此,如果孩子说match_parentfill_parent已被弃用),则父母将传入其自己的大小或剩余空间(大部分时间......)

然后,孩子接受可用的尺寸,拨打setMeasuredDimenstion(allTheSpaceIGot)并为您量身定做。

在布局期间,父母会检查孩子的测量尺寸。然后相应地设置儿童界限(上,左,下,右)。

最后在onDraw中,每个孩子都在自己的范围内绘制。

总结一下:

  • Child向父母提供有关其意愿的信息。
  • 父母为孩子提供一些可用空间。
  • 孩子说“我会接受”。
  • 父母给孩子最后的限制
  • Child在约束中绘制自己

如果你想为视图分配60%,你应该看看创建一个自定义ViewGroup(因为那是实际决定子尺寸的人)

我还撰写了一篇关于custom views的博文,其中详细介绍了如何create a custom layout

答案 1 :(得分:2)

Android的完整源代码是开源的,只需点击几下即可在Google上免费获取,因此您可以阅读并随意学习。

但只是一个公平的警告,这绝对不是你想要完成的小任务,因为你需要考虑大量的案例。

如果您希望布局采用可用高度/宽度的X%,请查看PercentageRelativeLayout

仅供参考:'fill_parent'已弃用,请改用'match_parent'。他们确实完全一样,只是一个不同的词。