我在玩Android布局时试图更好地理解权重,我偶然发现了一个我无法解释的场景。我连续有三个UI组件。一个权重为1的LinearLayout和宽度为wrap_content(内部有一个按钮),后跟两个宽度为0dp且权重为1的按钮。我期待LinearLayout小于按钮的宽度但是当它是渲染后,LinearLayout占用了一半的空间,每个按钮占据了屏幕空间的四分之一。即使第一个按钮(在LinearLayout内部)比线性布局用完的空间小得多,也会发生这种情况。任何人都可以解释原因吗?
PS:如果你给LinearLayout宽度为0dp,权重为1,我知道这样可以正常工作(所有间隔均匀),但是想知道为什么这种情况会导致它出现这种情况。
<LinearLayout
android:layout_width="match_parent"
android:orientation="horizontal"
android:layout_height="wrap_content">
<LinearLayout
android:layout_width="wrap_content"
android:orientation="horizontal"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@android:color/holo_blue_bright">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="W = 1"/>
</LinearLayout>
<Button
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="W = 1"/>
<Button
android:layout_width="0dp"
android:layout_weight="1"
android:layout_height="wrap_content"
android:text="W = 1"/>
</LinearLayout>
答案 0 :(得分:0)
您正在为 LinearLayout 设置权重 所以它占用了所有空间
并且您没有为任何父
定义 weight_sum <LinearLayout
android:layout_width="wrap_content"
android:orientation="horizontal"
android:layout_height="wrap_content"
android:layout_weight="1"
android:background="@android:color/holo_blue_bright">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="W = 1"/>
</LinearLayout>
重量取决于屏幕的宽度/高度,而不是父母的宽度/高度 所以去除重量
如果设置weight_sum =&#34; 10&#34;然后整个屏幕可以分成10个部分,然后根据需要使用layout_weight
定义最大重量总和。如果未指定,则通过添加所有子项的layout_weight来计算总和。例如,通过为layout_weight设置0.5并将weightSum设置为1.0,可以使单个子项占总可用空间的50%。
必须是浮点值,例如&#34; 1.2&#34;。
<LinearLayout
android:layout_width="wrap_content"
android:orientation="horizontal"
android:layout_height="wrap_content"
android:background="@android:color/holo_blue_bright">
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="W = 1"/>
</LinearLayout>
了解更多关注this
您也可以参考this
答案 1 :(得分:0)
您需要定义
android:weightSum="" // 3 in your case
外部LinearLayout中的
答案 2 :(得分:0)
我不确定我是否可以清楚地解释为什么这不起作用,除非您使用weight
,那么您的View
应该有{{1} }或width
为0,具体取决于其父级的height
。对不起,我的例子比言语更好。但是,我可以告诉您,为了达到您想要的效果,只需从子orientation
中取出layout_weight
属性即可获得所需的效果。
这会将LinearLayout
打包到它需要的内容,然后让两个LinearLayout
平均占用剩下的空间。尝试一下,你会看到我的意思。我想有一篇文章谈到这一点。我会看看能不能找到它。
Buttons
找到它
layout_weight这部分文档中有一个例子,说明了你要做的事情。
答案 3 :(得分:0)
我认为你不需要像其他人所说的那样定义一个weightSum。
我测试了你的代码,事实上你发现的内容非常有趣。似乎正在发生的是内部LinearLayout首先使用wrap内容来获取其基本宽度,然后共享其自身与其他两个按钮之间的剩余宽度。因此,内部按钮很小(只使用其最小宽度),而LinearLayout的宽度等于小按钮+其他按钮之一。
我希望这是有道理的。很好的发现!