搞明白android中layout-weight的用法

    本文是学习这篇博客所得的收获:
    Android:Layout_weight的深刻理解

    当子控件有layout_weight属性时, 系统将先按照layout_widthlayout_hight属性
    先把子控件放到父控件中, 之后才解析layout_weight属性, 然后计算父控件中的剩余空间,
    最后按比例分配剩余空间给子控件.

    看一下处理layout_weight时所用到的公式:

    # 实际尺寸: 子控件最终展示出来的尺寸
    # 当前尺寸: 子控件刚被放到布局中, 系统还没有解析其weight属性时的尺寸
    # weight比例: 子控件在所有有`layout_weight`属性的控件中所占的比例
    #             (例: 三个子控件, 第一个比重为1, 第二个为2, 第三个为2,
    #              那么第一个所占比例为1/5, 第二个为2/5, 第三个为2/5)
    # 剩余空间: 子控件刚被放到父控件中, 系统还没有解析其weight属性时父控件还有多少剩余空间
    
    剩余空间 = 父控件尺寸 - 子控件1尺寸 - 子控件2尺寸 - 子控件3尺寸...
    实际尺寸 = 当前尺寸 + weight比例 * 剩余空间尺寸
    

    当控件的layout_width以及layout_hight的值为0或者wrap_content时,
    layout_weight属性很容易预测最终效果, 它们会按照自己的weight比例
    分配剩余空间尺寸.

    需要留意的是当控件的layout_widthlayout_hight的值为fill_parent的时候,
    此时每个子控件在刚被放到父控件中, 且系统还没有解析子控件的layout_weight时,
    父控件就已经没有剩余空间了,

    因为此时所有子控件的当前尺寸都等于父控件的尺寸, 且第一个子控件就已经占满了父控件!

    那么套用上述公式, 计算子控件最终实际尺寸的过程如下:

    下面假设一个父控件中有三个子控件, 其比重为1 : 2 : 3,
    则子控件的weight比例依次为1/6, 2/6, 3/6

    剩余空间的计算如下:

    剩余空间 = 父控件尺寸 - 子控件1当前尺寸 - 子控件2当前尺寸 - 子控件3当前尺寸
    # 上述等同于:
    剩余空间 = 父控件尺寸 - 父控件尺寸 - 父控件尺寸 - 父控件尺寸
    # 则(注意是负2):
    剩余空间 = -2 * 父控件尺寸
    

    子控件最终实际尺寸的计算如下:

    实际尺寸 = 当前尺寸 + weight比例 * 剩余空间尺寸
    # 子控件1:
    实际尺寸 = 父控件尺寸 + 1/6 * (-2 * 父控件尺寸)
            = 父控件尺寸 - 2/6 * 父控件尺寸
            = 4/6 * 父控件尺寸
            = 2/3 * 父控件尺寸
    
    # 子控件2:
    实际尺寸 = 父控件尺寸 + 2/6 * (-2 * 父控件尺寸)
            = 父控件尺寸 - 4/6 * 父控件尺寸
            = 2/6 * 父控件尺寸
            = 1/3 * 父控件尺寸
    
    # 子控件3:
    实际尺寸 = 父控件尺寸 + 3/6 * (-2 * 父控件尺寸)
            = 父控件尺寸 - 6/6 * 父控件尺寸
            = 父控件尺寸 - 父控件尺寸
            = 0
    

    所以此时子控件3将会消失, 不会显示在屏幕上.