layout_weight部分常见属性解析

</pre><pre name="code" class="html"><pre name="code" class="java"><?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="horizontal" >
    <TextView 
        android:layout_width="wrap_content"
        android:layout_height="48dp"
        android:layout_weight="1"
        android:background="#44f00000"//设置背景颜色
        android:gravity="center"
        android:text="111111111111"
        />
     <TextView 
        android:layout_width="0dp"
        android:layout_height="48dp"
        android:layout_weight="2"
        android:background="#44f00ff0"
        android:gravity="center"
        android:text="2"
        />
      <TextView 
        android:layout_width="0dp"
        android:layout_height="48dp"
        android:layout_weight="2"
        android:background="#440000ff"
        android:gravity="center"
        android:text="3"
        />
</LinearLayout>
 

如上面xml文件所示则显示的布局如图:解释一下,它是先将wrapcontent所占的长度分出去然后再将剩余控件的长度按照weight的比例1:2:2再次进行分配。



若将第一个TextView的layout_width设置成0dp,则如下图显示:




此时可以发现第一个TextView的控件不在与另外两个底部相持平,但是第一个TextView空间里面内容的第一行还是与其他控件的内容相持平的。此时需要在父布局LinearLayout中设置android:baselineAligned="false"将默认设置设置为false,此时因为三个TextView的控件的Layout_weight都为0dp,所以此时的宽度就会按照weight的比例1:2:2的宽度来显示如图所示:



可以看出LinearLayout中的weight属性首先按照控件声明中的尺寸进行分配,然后将剩下 的尺寸按weight分配。


若将三个TextView的控件的wight都设置成match_parent,此时三个控件如下图所示:


为什么会是这样呢,明明比例是1:2:2啊。

首先减去控件声明的尺寸剩下的尺寸在按比例分配。假设外层的LinearLayout是480,这里三个TextView声明的宽度都是480,而第一个就把这个480分配完了,于是减去控件声明的宽度此时剩余的宽度是480-480*3=-960是负的960,把这-960在平均分成5份,第一个TextView占据其中的一份,第二个和第三个TextView各占据两分,于是:

第一个TextView所占据的宽度应该是:自身的matchparent也就是480加上分配的剩下的宽度于是就是:480+(-960*0.2)=480*(3/5)。

第二个TextView所占据的宽度就是:自身的matchparent也就是480加上分配的剩下的宽度于是就是:480+(-960*0.4)=480*(1/5)。

第三个TextView所占据的宽度就是:自身的matchparent也就是480加上分配的剩下的宽度于是就是:480+(-960*0.4)=480*(1/5)。





如果说在linearlayout当中只有一个Textview并且你想让他占据整个宽度的二分之一的话,只需要在父布局中设置weightSum=2在子空间TextView中设置weight等于1就可以了。


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值