我总是在Android文档中读到这个有趣的重量值。 现在我想第一次尝试它,但它根本不工作。
据我所知,这个布局的文件:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:text="Register"
android:id="@+id/register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip"
weight="1" />
<Button
android:text="Not this time"
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip"
weight="1" />
</LinearLayout>
应该创建两个水平对齐的按钮,并平等地共享空间。问题是两个按钮不会增长以填充空间。
我希望按钮增长并填满整行。如果两个按钮都设置为仅匹配父按钮,则显示第一个按钮并填充整行。
答案 0 :(得分:653)
要记住的三件事:
示例:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:weightSum="5">
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="1" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="2" />
<Button
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="3" />
</LinearLayout>
结果:
答案 1 :(得分:147)
您没有设置layout_weight
属性。您的代码为weight="1"
,内容为android:layout_weight="1"
。
答案 2 :(得分:51)
它是android:layout_weight
。重量只能在LinearLayout
中使用。如果linearlayout的方向为Vertical,则使用android:layout_height="0dp"
,如果方向为水平,则使用android:layout_width = "0dp"
。它会完美运作。
答案 3 :(得分:21)
答案 4 :(得分:15)
尝试将两个按钮的layout_width
设置为“0dip”,将两个按钮的weight
设置为0.5
答案 5 :(得分:7)
LinearLayout支持为各个孩子分配权重。此属性为视图指定“重要性”值,并允许它展开以填充父视图中的任何剩余空间。默认权重为零
计算以在子项之间分配任何剩余/额外空间。 (不是总空间)
分配给孩子的空间=(儿童个人体重)/(线性布局中每个孩子的体重总和)
示例(1): 如果有三个文本框,其中两个声明权重为1,而第三个没有权重(0),则剩余/额外空间分配给
1st text box = 1/(1+1+0)
2nd text box = 1/(1+1+0)
3rd text box = 0/(1+1+0)
示例(2):假设我们在水平行中有一个文本标签和两个文本编辑元素。标签没有指定layout_weight,因此它占用了渲染所需的最小空间。如果两个文本编辑元素中每个文本编辑元素的layout_weight设置为1,则父布局中的剩余宽度将在它们之间平均分配(因为我们声称它们同样重要)。
calculation :
1st label = 0/(0+1+1)
2nd text box = 1/(0+1+1)
3rd text box = 1/(0+1+1)
如果第一个文本框的layout_weight为1且第二个文本框的layout_weight为2,则剩余空间的三分之一将被赋予第一个,而三分之二将被赋予第二个(因为我们声称第二个更重要)。
calculation :
1st label = 0/(0+1+2)
2nd text box = 1/(0+1+2)
3rd text box = 2/(0+1+2)
答案 6 :(得分:6)
在按钮的宽度字段中,将wrap-content
替换为0dp
使用视图的layout_weight属性。
android:layout_width="0dp"
这就是你的代码的样子:
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:text="Register"
android:id="@+id/register"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_weight="1" />
<Button
android:text="Not this time"
android:id="@+id/cancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_weight="1" />
</LinearLayout>
layout_weight用于将任何剩余空间分配为比例。在这种情况下,两个按钮的宽度为“0dp”。因此,剩余空间将被分为1:1比例,即空格将在按钮视图之间平均分配。
答案 7 :(得分:5)
将android:layout_weight
替换为android:weight
。
对LinearLayout
使用权重时。您必须在weightSum
中添加LinearLayout
,并根据LinearLayout
的方向,您必须为所有0dp
的儿童视图设置LinearLayout
宽度/高度1} p>
示例:
如果 Linearlayout
的方向为Vertical
,则使用LinearLayout
0dp
的子视图的宽度
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="vertical"
android:weightSum="3">
<Button
android:text="Register"
android:id="@+id/register"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_weight="2" />
<Button
android:text="Not this time"
android:id="@+id/cancel"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_weight="1" />
</LinearLayout>
如果方向Linearlayout
为horizontal
,则使用LinearLayout
设置所有0dp
的子视图的高度。
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="3">
<Button
android:text="Register"
android:id="@+id/register"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:padding="10dip"
android:layout_weight="2" />
<Button
android:text="Not this time"
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="0dp"
android:padding="10dip"
android:layout_weight="1" />
</LinearLayout>
答案 8 :(得分:4)
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:id="@+id/logonFormButtons"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:baselineAligned="true"
android:orientation="horizontal">
<Button
android:id="@+id/logonFormBTLogon"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/logon"
android:layout_weight="0.5" />
<Button
android:id="@+id/logonFormBTCancel"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:text="@string/cancel"
android:layout_weight="0.5" />
</LinearLayout>
答案 9 :(得分:4)
也许将两个按钮layout_width属性设置为“fill_parent”就可以了。
我刚刚测试了这段代码,它可以在模拟器中运行:
<LinearLayout android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="hello world"/>
<Button android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:text="goodbye world"/>
</LinearLayout>
请务必在两个按钮上将layout_width设置为“fill_parent”。
答案 10 :(得分:2)
另外,您需要为android:layout_width="0dp"
LinerLayout
答案 11 :(得分:2)
在上面的XML中,将线性布局的android:layout_weight
设置为2
:
android:layout_weight="2"
答案 12 :(得分:1)
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content">
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="Button 1" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="Button 2" />
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="Button 3" />
</LinearLayout>
答案 13 :(得分:1)
你必须这样写它为我工作
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal"
android:weightSum="2">
<Button
android:text="Register"
android:id="@+id/register"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_weight="1" />
<Button
android:text="Not this time"
android:id="@+id/cancel"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_weight="1" />
答案 14 :(得分:1)
以下是代码中的更改(标记为 BOLD ):
<LinearLayout
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal">
<Button
android:text="Register"
android:id="@+id/register"
android:layout_width="0dp" //changes made here
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_weight="1" /> //changes made here
<Button
android:text="Not this time"
android:id="@+id/cancel"
android:layout_width="0dp" //changes made here
android:layout_height="wrap_content"
android:padding="10dip"
android:layout_weight="1" /> //changes made here
</LinearLayout>
由于LinearLayout的方向为水平方向,因此您需要将宽度仅保持为0dp。,以便在该方向上使用权重。 (如果您的方向是垂直的,那么您的身高只会保持0dp)。
由于有2个视图,并且您为这两个视图放置了android:layout_weight="1"
,这意味着它将在水平方向(或宽度)上平均分割两个视图。
答案 15 :(得分:0)
这是您问题的完美答案
<LinearLayout
xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:orientation="horizontal" >
<Button
android:text="Register" android:id="@+id/register"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:padding="10dip" weight="1" />
<Button
android:text="Not this time" android:id="@+id/cancel"
android:layout_width="wrap_content" android:layout_height="wrap_content"
android:padding="10dip" weight="1" />
</LinearLayout>
答案 16 :(得分:0)
用wrap_content
代替fill_parent
。
答案 17 :(得分:0)
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:layout_gravity="center"
android:background="#008">
<RelativeLayout
android:id="@+id/paneltamrin"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
>
<Button
android:id="@+id/BtnT1"
android:layout_width="wrap_content"
android:layout_height="150dp"
android:drawableTop="@android:drawable/ic_menu_edit"
android:drawablePadding="6dp"
android:padding="15dp"
android:text="AndroidDhina"
android:textColor="#000"
android:textStyle="bold" />
</RelativeLayout>
<RelativeLayout
android:id="@+id/paneltamrin2"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:layout_weight="1"
android:gravity="center"
>
<Button
android:layout_width="wrap_content"
android:layout_height="150dp"
android:drawableTop="@android:drawable/ic_menu_edit"
android:drawablePadding="6dp"
android:padding="15dp"
android:text="AndroidDhina"
android:textColor="#000"
android:textStyle="bold" />
</RelativeLayout>
</LinearLayout>