LinearLayout weight使用技巧

刚开始学使用LinearLayout的时候觉得weight很容易,按照比例就行了,但是项目中遇到一个问题让我对weight产生了新的认识,先看下我的问题:

这里写图片描述

红色的图片和文字”抢购”之间是有文字的,但是这个文字长度是不是固定的,但是抢购是在文字右边的….

这个时候使用weight就很简单了

一个水平向右的线性布局
最左边的图片
中间的文字 weight=1 width=wrap_content
右边的抢购文字

图片和抢购没有设置weight,绘图的时候会先把图片和抢购的文本框绘制出来然后把剩下的布局全用来绘制中间的文字

weight是剩余空间的分配系数
weight是剩余空间的分配系数
weight是剩余空间的分配系数

LinearLayout源码理解下:

if (childWeight > 0) {
        //remainingExcess  表示剩余空间  remainingWeightSum 表示剩余空间总系数 childWeight 分配系数
        //这句话表示子View获取剩余的空间
        final int share = (int) (childWeight * remainingExcess / remainingWeightSum);
        //剩余空间被瓜分走了一块
        remainingExcess -= share;
        //剩余空间总系数减少了一部分
        remainingWeightSum -= childWeight;

        final int childWidth;
        if (mUseLargestChild && widthMode != MeasureSpec.EXACTLY) {
            childWidth = largestChildWidth;
        } else if (lp.width == 0 && (!mAllowInconsistentMeasurement
                || widthMode == MeasureSpec.EXACTLY)) {
           //如果你设置View宽度为0,那么实际显示的就是weight获取的剩余空间
            childWidth = share;
        } else {
            //否则实际显示的就是你分配的大小+weight获取的剩余空间
            childWidth = child.getMeasuredWidth() + share;
        }
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值