我经常在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>

应该创建两个水平对齐的按钮,并平等地共享空间。问题是这两个按钮不能填满空间。

我希望按钮增长,并填满整个行。如果两个按钮都设置为匹配父按钮,则只显示第一个按钮并填充整行。


当前回答

要记住3件事:

设置child的android:layout_width为"0dp" 设置父类的android:weightSum (编辑:正如Jason Moore注意到的,这个属性是可选的,因为默认情况下它被设置为子节点的layout_weight总和) 按比例设置每个子的android:layout_weight(例如weightSum="5",三个子:layout_weight ="1", layout_weight="3", layout_weight="1")

例子:

<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>

结果是:

其他回答

用fill_parent替换wrap_content。

也许将两个按钮的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”。

另外,你需要添加这个android:layout_width="0dp"为儿童视图[按钮视图]的LinerLayout

就像@Manoj Seelan的回答

将android:layout_weight替换为android:weight。

当你在LinearLayout中使用Weight时。你必须在LinearLayout中添加weightSum,根据你的LinearLayout的方向,你必须为所有LinearLayout的子视图的宽度/高度设置0dp

例子:

如果Linearlayout的方向是垂直的,那么设置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的方向是水平的,那么将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>

在上面的XML中,将线性布局的android:layout_weight设置为2: android: layout_weight = " 2 "