2017-05-01 27 views
0

我在fill_parent中看到很大的价值,我想自己实现它,这样我可以做的不仅仅是填充剩余空间(例如:填充剩余空间的80%等)Android中的fill_parent如何在底层实际工作?

fill_parent实际上是如何工作的?至于它是如何计算剩余空间的,它在运行时如何工作等等。

我已经在fill_parent中做过类似的事情,在过去我计算出一个元素应该占用的空间,它基于当前的屏幕大小,该元素应该占用多少屏幕等,但我想知道具体如何Android与fill_parent

+2

'fill_parent'已被弃用,以支持'match_parent'。您可能想查看[Flexbox Layout](https://github.com/google/flexbox-layout)。虽然我自己并没有使用它,但我认为它可能会提供您正在寻找的功能。 – Stephen

+0

我会去看一看。我的问题是,虽然不match_parent给元素的父宽度,而fill_parent说什么空间剩下,填充它? –

+0

fill_parent已被重命名为match_parent。否则他们是相同的http://stackoverflow.com/questions/5761960/what-is-the-difference-between-match-parent-and-fill-parent – Rockney

回答

6

尝试创建一个自定义的View或ViewGroup,你会发现。

有上带来了查看到你的屏幕3个阶段:

  • 措施
  • 布局

在措施的家长告诉孩子多少空间可用。它可以做到关于孩子布局参数。因此,如果孩子说match_parentfill_parent已过时)母公司将通过其任自己的大小,或者剩余空间(大部分时间...)

孩子然后将可用的尺寸,来电setMeasuredDimenstion(allTheSpaceIGot)这就是为你量身定做。

在布局过程中,父母会检查儿童的测量尺寸。然后相应地设置儿童的界限(顶部,左侧,底部,右侧)。

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


总结这件事:

  • 儿童提供了有关其意愿父信息。
  • 家长为孩子提供一些可用空间。
  • 孩子说“我会接受”。
  • 家长给孩子的最终约束
  • 儿童画本身的约束

如果你想分配说60%的观点,你应该看看创建一个自定义的ViewGroup(因为这是内谁实际上决定孩子的尺寸)

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

+0

你是什么意思“大部分时间”它会通过剩余的空间?有没有特殊的情况下,这不会发生什么? –

+1

@TrevorHart每个ViewGroup都有自己的如何分配空间的实现。 FrameLayout,LinearLayout等都将遵守标准,但例如说我创建了提到_60%大小的layout_。根据实际的实现,它可以忽略'wrap_content'和'match_parent',并且总是给我60%的可用大小。此外,例如ScrollView有时候会有点不同(这就是为什么ScrollView中的视图应该是'wrap_content',IIRC你可以在没有约束的情况下获得'0'高度,因此应该测量全高)。 –

+0

这对于知道所有超级有用, 我感觉合理。 –

2

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

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

如果你想有一个布局充分利用可用的高度/宽度的X%的,看看PercentageRelativeLayout

仅供参考:“FILL_PARENT”已过时,使用“match_parent”代替。他们字面上做的是完全一样的东西,它只是一个不同的词。

+0

不知道PercentageRelativeLayout,谢谢你,我会看看它。注意,我知道这是一个很大的任务,我应该说我只是想知道它是如何工作的,然后为我的特定用例实现它的原始版本。 –