Android:试图理解android:layout_weight

19

我正在尝试将一个页面分成三部分。我想使用百分比值来实现,但 Android 不支持这种方式。相反,我必须使用 android:layout_weight。但我很难理解并正确使用它,特别是实际大小如何计算。有没有一种方法可以从 android:layout_weight 中获得百分比值(0..100%)?

下面我通过几个案例(见附图)描述了问题。所有彩色块都是具有android:layout_height="fill_parent"<LinearLayout>,因为我希望整个屏幕被等分。

案例1

alt text

好的,很简单。每个<LinearLayout>占33%。

案例2

alt text

糟糕!第一个(黄色)<LinearLayout>完全消失了?为什么?

案例3

alt text

又困惑了。黄色的<LinearLayout>回来了。但是,前两个<LinearLayout>的权重更大,它们却变小了?发生了什么?

案例4

alt text

我绝对不知道所有这些背后的数学原理。

2个回答

25
有没有一种方法可以从android:layout_weight中获取百分比值(0..100%)?
有的。让它们相加等于100。
对于你想要的“百分比值”,你希望LinearLayout内各个项的android:layout_height为0px。

8
马克,你让我开心极了。你无法想象我已经花了多少时间来解决这些奇怪的情况。而一个简单的 android:layout_height="0px" 就解决了一切 :-) - znq
1
将layout_width设置为“fill_parent”,将layout_weight设置为类似于“0.2”、“0.75”的浮点值也可以起到作用,在这种情况下,数字越小,元素所占空间越大。请问这样做是否可行? - Yar

8

当您使用android:layout_height="fill_parent"来设置条形的高度时,您没有留下任何可用空间。(因为它们填充了父元素。)因为所有三个条形都被设置为填充,所以请求的高度实际上是父元素高度的3倍,因此权重被应用于负剩余空间。这解释了您所看到的奇怪行为,以及为什么将layout_height设置为0px可以解决它。


链接已失效。你的博客文章在其他地方可用吗? - Nick Westgate

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接