282

我总是在 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>

应该创建两个水平对齐并平均共享空间的按钮。问题是两个按钮不会增长以填充空间。

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

4

19 回答 19

724

3件事要记住:

  • 将孩子的android:layout_width设置为“0dp”
  • 设置父的android:weightSum编辑:正如 Jason Moore 注意到的,这个属性是可选的,因为默认情况下它被设置为孩子的 layout_weight 总和)
  • 按比例设置每个孩子的android:layout_weight (eg 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>

结果:

布局重量示例

于 2010-12-23T09:21:49.923 回答
170

您没有设置layout_weight属性。您的代码读取weight="1"并且应该读取android:layout_weight="1".

于 2010-04-23T17:08:27.090 回答
56

android:layout_weight。重量只能用于LinearLayout. 如果 linearlayout 的方向是 Vertical,则使用android:layout_height="0dp",如果方向是水平,则使用android:layout_width = "0dp". 它会完美地工作。

于 2012-09-12T16:38:52.707 回答
30

此图像总结了线性布局。

线性布局和重量

您可以点击此链接以获取有关该主题的更多信息。Just Maths - 视图、视图组和布局

线性布局的视频教程:宽度、高度和重量

Android 线性布局教程

于 2015-11-19T07:24:15.717 回答
18

尝试将layout_width两个按钮的 设置为“0dip”,将weight两个按钮的设置为0.5

于 2010-04-23T14:16:26.340 回答
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) 
于 2013-07-26T13:11:40.353 回答
7

在按钮的宽度字段中,替换wrap-content0dp
使用视图的 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 的比例划分,即空间将在 Button View 之间平均分配。

于 2014-03-03T17:52:06.623 回答
7

就像@Manoj Seelan的回答一样

替换为android:layout_weightandroid:weight

当您将重量LinearLayout. 您必须添加weightSumLinearLayout根据您的方向,您LinearLayout必须为所有子视图设置0dp宽度/高度LinearLayout

例子 :

如果方向Linearlayout是,则设置所有`s子视图的Vertical宽度LinearLayout0dp

 <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高度。LinearLayout0dp

 <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>
于 2015-05-13T19:09:46.410 回答
5

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

于 2010-04-23T13:21:40.683 回答
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>
于 2011-02-23T13:35:12.717 回答
3

以下是代码中的更改(以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"为这两个视图放置,这意味着它将在水平方向(或按宽度)等分两个视图。

于 2018-04-17T14:32:56.733 回答
2

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

于 2010-08-18T05:35:58.033 回答
2

另外,您需要android:layout_width="0dp"为子视图 [Button views] 添加此内容LinerLayout

于 2012-12-11T21:11:21.627 回答
2

你必须这样写它为我工作

<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" />
于 2016-10-06T11:20:37.193 回答
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>
于 2015-09-08T08:51:32.213 回答
0

替换wrap_contentfill_parent

于 2010-04-23T18:01:10.653 回答
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>
于 2011-07-06T12:47:03.037 回答
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>

在此处输入图像描述

于 2017-02-17T12:20:47.330 回答
0

这里有一些例子

等重的水平方向

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context=".MainActivity">


    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:layout_weight="1"
        android:text="1" />

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:layout_weight="1"
        android:text="2" />

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:layout_weight="1"
        android:text="3" />

</LinearLayout>

在此处输入图像描述

权重不等的水平方向

    <?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="horizontal"
    tools:context=".MainActivity">


    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:layout_weight="1"
        android:text="1" />

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:layout_weight="2"
        android:text="2" />

    <Button
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_margin="8dp"
        android:layout_weight="1"
        android:text="3" />

</LinearLayout>

在此处输入图像描述

等重垂直方向

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_margin="8dp"
        android:layout_weight="1"
        android:text="1" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_margin="8dp"
        android:layout_weight="1"
        android:text="2" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="0dp"
        android:layout_margin="8dp"
        android:layout_weight="1"
        android:text="3" />

</LinearLayout>

在此处输入图像描述

希望对您有所帮助!

于 2022-02-24T01:52:56.863 回答