android:为什么“layout_weight = 1”使视图在linearlayout中对齐父底部?

时间:2016-07-11 03:50:16

标签: android android-layout

xml布局如下:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:orientation="vertical"
        >
        <LinearLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:layout_weight="1">
        </LinearLayout>
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="bottom"/>
    </LinearLayout>

事实证明textview将被放置在其父级的底部。我认为layout_weight用于分配未使用的空间,并且使用layout_weight与以下代码非常相似:

    android:layout_width="0dp"

但在这种情况下,第一个布局要求占用所有空格:

    android:layout_width="match_parent"
    android:layout_height="match_parent

那么布局重量如何在这里工作? PS:我已经读过这个问题:What does android:layout_weight mean?但我不认为它解释了这个问题。

  

layout_weight指定布局中要分配给View的多少额外空间。

第一个linearlayout已经使用属性match_parent获取整个空间,为什么设置layout_weight使第二个视图在底部显示? 我相信这不是layout_weight的常用用法。希望有人指出我的错误。

2 个答案:

答案 0 :(得分:0)

当您使用layout_weight属性时,它用于计算单亲的子视图的权重。

由于你没有提到所有其他观点的重量,它表现不对。

当您希望子视图占父视图的特定百分比时,

layout_weight非常有用。

例如,

在父视图中,您需要提及:

android:weightSum="1"

因此,您的父视图的总权重为1,在两个视图中,您需要提及:

android:layout_weight=".9"android:layout_weight=".1"

所以第一个视图占用90%,第二个视图占用10%的空间。

更清楚理想情况下,所有孩子的权重总和应该等于父母提到的weightsum,以便按预期工作。

**正如你提供了textview的android:layout_width, android:layout_height`,这是错误,因为它会在权重中产生问题。

因此,要正确使用权重属性,您需要将其他规格设为0dp,以便加权成功应用。**

  

注意:使用体重时,android:layout_width, android:layout_height等其他规格应设为0dp

     

为了理解它,为什么不在下面玩   布局:

     

只需尝试更改linear_layout,text_view的权重,您就会看到它应该如何理想地运作:

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

    <LinearLayout
        android:id="@+id/linear_layout"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="10"
        android:background="@android:color/holo_blue_bright" >
    </LinearLayout>

    <TextView
        android:id="@+id/text_view"
        android:layout_width="match_parent"
        android:layout_height="0dp"
        android:layout_weight="90"
        android:background="@android:color/white"
        android:text="bottom"
        android:textColor="@android:color/black" />

</LinearLayout>

答案 1 :(得分:0)

如果要将组件放在布局中的单独框中,则应使用LinearLayout。  您可以使用orientation vertical horizental 定义框的方式。 您可以使用layout_weight轻松定义其大小。 看这里:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    android:id=@+id/parent_linear>

    <LinearLayout
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:layout_weight="4">
    </LinearLayout>
    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:text="bottom"/>
</LinearLayout>

parent_linear将您的布局分为两部分(因为您使用了2个组件)。现在,您可以将权重设置为子组件的宽度。所以,(对于TextView)你设置android:layout_width="0dp"的宽度和android:layout_weight="2" .. 跟随它用于LinearLayout - 。 结果是 parent_layout 将自身划分为6个部分(2 + 4 = 6),并为LinearLayout分配4个部分,为TextView分配2个部分。