我在fill_parent中看到很大的价值,我想自己实现它,这样我可以做的不仅仅是填充剩余空间(例如:填充剩余空间的80%等)Android中的fill_parent如何在底层实际工作?
fill_parent
实际上是如何工作的?至于它是如何计算剩余空间的,它在运行时如何工作等等。
我已经在fill_parent
中做过类似的事情,在过去我计算出一个元素应该占用的空间,它基于当前的屏幕大小,该元素应该占用多少屏幕等,但我想知道具体如何Android与fill_parent
。
我在fill_parent中看到很大的价值,我想自己实现它,这样我可以做的不仅仅是填充剩余空间(例如:填充剩余空间的80%等)Android中的fill_parent如何在底层实际工作?
fill_parent
实际上是如何工作的?至于它是如何计算剩余空间的,它在运行时如何工作等等。
我已经在fill_parent
中做过类似的事情,在过去我计算出一个元素应该占用的空间,它基于当前的屏幕大小,该元素应该占用多少屏幕等,但我想知道具体如何Android与fill_parent
。
尝试创建一个自定义的View或ViewGroup,你会发现。
有上带来了查看到你的屏幕3个阶段:
在措施的家长告诉孩子多少空间可用。它可以做到关于孩子布局参数。因此,如果孩子说match_parent
(fill_parent
已过时)母公司将通过其任自己的大小,或者剩余空间(大部分时间...)
孩子然后将可用的尺寸,来电setMeasuredDimenstion(allTheSpaceIGot)
这就是为你量身定做。
在布局过程中,父母会检查儿童的测量尺寸。然后相应地设置儿童的界限(顶部,左侧,底部,右侧)。
最后在onDraw中,每个孩子都在其范围内绘制自己。
总结这件事:
如果你想分配说60%的观点,你应该看看创建一个自定义的ViewGroup(因为这是内谁实际上决定孩子的尺寸)
我也写了一篇关于custom views的博客文章,其中详细介绍了如何create a custom layout。
你是什么意思“大部分时间”它会通过剩余的空间?有没有特殊的情况下,这不会发生什么? –
@TrevorHart每个ViewGroup都有自己的如何分配空间的实现。 FrameLayout,LinearLayout等都将遵守标准,但例如说我创建了提到_60%大小的layout_。根据实际的实现,它可以忽略'wrap_content'和'match_parent',并且总是给我60%的可用大小。此外,例如ScrollView有时候会有点不同(这就是为什么ScrollView中的视图应该是'wrap_content',IIRC你可以在没有约束的情况下获得'0'高度,因此应该测量全高)。 –
这对于知道所有超级有用, 我感觉合理。 –
Android的完整源代码是开源的,只需在Google上点击几下就可以免费获得,因此您可以阅读并完整学习。
但是,只是一个公平的警告,这绝对不是你想要完成的任务,因为有大量的案例需要考虑。
如果你想有一个布局充分利用可用的高度/宽度的X%的,看看PercentageRelativeLayout
仅供参考:“FILL_PARENT”已过时,使用“match_parent”代替。他们字面上做的是完全一样的东西,它只是一个不同的词。
不知道PercentageRelativeLayout,谢谢你,我会看看它。注意,我知道这是一个很大的任务,我应该说我只是想知道它是如何工作的,然后为我的特定用例实现它的原始版本。 –
'fill_parent'已被弃用,以支持'match_parent'。您可能想查看[Flexbox Layout](https://github.com/google/flexbox-layout)。虽然我自己并没有使用它,但我认为它可能会提供您正在寻找的功能。 – Stephen
我会去看一看。我的问题是,虽然不match_parent给元素的父宽度,而fill_parent说什么空间剩下,填充它? –
fill_parent已被重命名为match_parent。否则他们是相同的http://stackoverflow.com/questions/5761960/what-is-the-difference-between-match-parent-and-fill-parent – Rockney