Android中的线性布局和权重

我总是在Android文档中读到这个有趣的权重值。 现在我想第一次尝试一下,但它根本不行。< / p >

我从文档中了解到这样的布局:

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

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

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

439395 次浏览

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

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

你没有设置layout_weight属性。你的代码读为weight="1",它应该读为android:layout_weight="1"

fill_parent替换wrap_content

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

要记住3件事:

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

结果是:

布局权重示例

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

这是对你问题的完美回答

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

android:layout_weight。Weight只能在LinearLayout中使用。如果linearlayout的方向是Vertical,则使用android:layout_height="0dp";如果方向是horizontal,则使用android:layout_width = "0dp"。它会完美工作的。

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

线性布局支持为各个子节点分配权重。此属性为视图赋值“重要性”,并允许它展开以填充父视图中的任何剩余空间。默认权重为0

在子元素之间分配任意剩余/额外的空格。(不是总空间)

分配给child的空间= (child个体权重)/(线性布局中每个child的权重之和)

< >强示例(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)

在按钮的width字段中,将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的比例在它们之间划分,即空间将在按钮视图之间平均分配。

类似@Manoj Seelan的答案

android:weight替换android:layout_weight

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

例子:

如果 Linearlayout的方向是Vertical,然后用0dp设置所有LinearLayout的子视图的宽度

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

如果的方向Linearlayouthorizontal,然后用0dp设置所有LinearLayout的子视图的高度。

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

这张图片总结了线性布局。

线性布局和权重

您可以点击此链接获取有关该主题的更多信息。只是数学-视图,视图组和布局

视频教程线性布局:宽度,高度和放大器;权重

< a href = " https://youtu.be/RKSpQT84qAU?list=PLRKyZvuMYSIMLGcXqzQBEzxgfDq7D_GZT" rel="noreferrer">Android线性布局教程 . list=PLRKyZvuMYSIMLGcXqzQBEzxgfDq7D_GZT" rel="noreferrer

你必须这样写:为我工作

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

enter image description here

以下是代码中的更改(标记在大胆的中):

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

由于你的线性布局的方向是水平的,因此你需要保持你的宽度仅为0dp。在这个方向上使用权重。(如果你的方向是垂直的,你会保持你的高度只有0dp)

由于有两个视图,并且你已经为两个视图放置了android:layout_weight="1",这意味着它将在水平方向(或宽度)上将两个视图等分。

下面是一些例子

水平方向,重量相等

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

enter image description here

具有不相等权重的水平方向

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

enter image description here

垂直方向,重量相等

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

enter image description here

希望您有所帮助!