刚开始学使用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;
}