layout_weight 额外空间的分配

                这里主要从宽度的讨论layout_weight   。 layout_weight 是用来对总的额外宽度的分配的权重,把各个子view分配到的额外宽度再加上原来的宽度,就是最后的宽度大小了。

              这里关键在于额外宽度的计算的方法,总额外宽度是这样计算的:父宽度 减去 各个子view的宽度之和;每个子view分配到的额外宽度 = 总额外宽度 * 权重比。

              子view宽度是xml中指定的,比如 android:layout_width="0dp" ,那这个view的宽度就是0;又如android:layout_width="match_parent" ,那它的宽度就是父的宽度了;再如 android:layout_width="wrap_content" 它的实际宽度视内容而定,最大等于父的宽度;指定确定的值 android:layout_width="150dp",这样这个view的宽度就是 150。

               <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="200dp"
    android:orientation="horizontal" >


    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:text=""
        android:background="#FF0000" />


    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="2"
        android:text=""
        android:background="#00FF00" />


    <TextView
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:text=""
        android:layout_weight="2"
        android:background="#0000FF" />


</LinearLayout>


LinearLayout宽度为match_parent , 每个TextView的宽度也是match_parent, 那么三个子TextView的总宽度就是3*match_parent;这样额外的总宽度为 match_parent - 3*match_parent = -2*match_parent ;

第一个 TextView分配到的额外宽度为 : -2*match_parent * 1/(1+2+2) = -2 *match_parent / 5 ; //权重是1,总权重为5

第二个 TextView分配到的额外宽度为 : -2*match_parent * 2/(1+2+2) = -4 * match_parent / 5 ; //权重是2,总权重为5

第三个 TextView分配到的额外宽度为 : -2*match_parent * 2/(1+2+2) = -4 * match_parent / 5 ; //权重是2,总权重为5

这样下来 每个子TextView 的原来宽度 加上 分配到的额外宽度就是最后宽度了,(注意负号)

第一个TextView的最后宽度:  match_parent + (-2 * match_parent / 5 ) = (3/5) * match_parent  ;

第二个TextView的最后宽度: match_parent + (-4 * match_parent / 5 ) = (1/5) * match_parent  ;

第三个TextView的最后宽度: match_parent + (-4 * match_parent / 5 ) = (1/5) * match_parent  ;


再比如:

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="150dp"
    android:layout_height="200dp"
    android:orientation="horizontal" >


    <TextView
        android:layout_width="100dp"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:text=""
        android:background="#FF0000" />


    <TextView
        android:layout_width="50dp"
        android:layout_height="match_parent"
        android:layout_weight="2"
        android:text=""
        android:background="#00FF00" />


    <TextView
        android:layout_width="0dp"
        android:layout_height="match_parent"
        android:text=""
        android:layout_weight="2"
        android:background="#0000FF" />


</LinearLayout>

LinearLayout宽度为150,第一个TextView 宽度100,第二个TextView宽度 50,第三个TextView宽度 0,那么三个子TextView总的宽度为100+50+0 = 150; 那么额外总宽度 = 父的宽度(150) - 各个子宽度之和(150) = 0;

这样没有额外的总宽度来分配了,那么最后

第一个TextView的宽度 自己的宽度(150)+额外分配到的宽度(0) = 150;

第二个TextView的宽度 自己的宽度(50)+额外分配到的宽度(0) = 50;

第二个TextView的宽度 自己的宽度(0)+额外分配到的宽度(0) = 0;



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值