当我有以下内容时,它显示四种颜色的顶部布局比底部布局区域的面积小得多。
根据this documentation,当您向layout_weight
添加更多内容时,它应该会增加区域,但会在代码中减少。
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent">
<LinearLayout
android:orientation="horizontal"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="4">
<TextView
android:text="red"
android:gravity="center_horizontal"
android:background="#aa0000"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="3"/>
<TextView
android:text="green"
android:gravity="center_horizontal"
android:background="#00aa00"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"/>
<TextView
android:text="blue"
android:gravity="center_horizontal"
android:background="#0000aa"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"/>
<TextView
android:text="yellow"
android:gravity="center_horizontal"
android:background="#aaaa00"
android:layout_width="wrap_content"
android:layout_height="fill_parent"
android:layout_weight="1"/>
</LinearLayout>
<LinearLayout
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:layout_weight="1">
<TextView
android:text="row one"
android:textSize="15pt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<TextView
android:text="row two"
android:textSize="15pt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<TextView
android:text="row three"
android:textSize="15pt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
<TextView
android:text="row four"
android:textSize="15pt"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"/>
</LinearLayout>
</LinearLayout>
答案 0 :(得分:41)
我遇到了同样的问题。诀窍是不要对你要设置权重的控件使用“wrap_content”或“fill_parent”。而是将layout_height设置为0px(在垂直布局内),然后子控件将按权重值进行比例调整。
答案 1 :(得分:32)
如果您收到错误
错误强>
可疑大小:这会使视图隐藏,可能是预期的 布局......
记得在上面设置正确的参数
父母的android:orientation
答案 2 :(得分:10)
如果在LinearLayout中使用fill_parent,布局将占用尽可能多的空间,稍后定义的所有布局项将必须处理剩余的空间。
如果您将LinearLayouts的高度设置为wrap_content,则权重应按照文档记录。
答案 3 :(得分:9)
我知道这已经很晚了但希望能帮助别人:
在父级上使用android:weightSum
。这是dev docs的链接。
http://developer.android.com/reference/android/widget/LinearLayout.html#attr_android:weightSum
在父级上使用android:weightSum
1.0
,然后在0.x
的子视图上使用android:layout_weight
,以便他们使用该空间比率。
答案 4 :(得分:8)
在Janusz所说的基础上,如果你使用fill_parent,你可以设置android:layout_weight来“拆分”多个布局项之间的“完整区域”。
layout_weight不会增加区域,而是将其“右”增加到该区域。但它也与父母有关。如果您的父级布局为layout_height = fill_parent,且layout_weight = 0且父级的兄弟姐妹具有相同的兄弟,则将layout_weight = 1设置为其中一个子级不会影响父级。
父母和兄弟姐妹都会占用他们可以填补的可用区域的50%。
答案 5 :(得分:3)
解决方案是在使用layout_weight时将layout_height设置为0px。
但为什么你会观察到这种明显奇怪/倒置的行为?
短暂:剩下的空间是负数,因此体重4的孩子会得到更多的负空间,而且身高也会降低。
详情:
假设父垂直布局的高度为100像素。
每个孩子的布局高度为fill_parent
(即每个孩子的身高也是100像素)
所有孩子的总身高= 2 * 100像素
剩余高度= 100 - (2 * 100)= -100像素(为负)
现在,让我们在孩子之间分配这个剩余的高度。第一个将获得最大的部分:80%(即-100 * 4 /(4 + 1))。第二个孩子收到20%(即-100 * 1 /(4 + 1))
现在计算得到的高度:
孩子1:100 +(-80)= 20px
孩子2:100 +( - 20)= 80px
这里没什么奇怪的,只有数学。请注意,剩余空间可能是负面的! (或者根据建议将高度明确设置为0)
答案 6 :(得分:1)
在线性布局属性中,将布局宽度更改为"fill_parent"
而不是"wrap_content"
希望它有所帮助。
答案 7 :(得分:1)
如果linearlayout的方向是垂直的,则将layout_height设置为0dp。在水平布局的情况下,将layout_width设置为0dp。
如果我们不遵守上述规则,视图会根据指定的属性占用空间,因此对齐方式不符合预期。