Android xml中layout_weight属性的工作原理

layout_weight属性用于告诉父布局如何安排子组件。

以水平的LinearLayout为例,它在分配子组件时使用的是layout_width和layout_weight参数的混合值。
现在假设LinearLayout对应的xml布局如下:

<LinearLayout
    android:orientation="horizontal"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:layout_marginLeft="@dimen/activity_horizontal_margin"
    android:layout_marginRight="@dimen/activity_horizontal_margin">

    <Button
        android:id="@+id/crime_date"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_weight="1"/>

    <CheckBox
        android:id="@+id/crime_solved"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="@string/crime_solved_label"
        android:layout_weight="1"/>

</LinearLayout>

根据上面的布局,LinearLayout将如此安排布局:
第一步,LinearLayout查看layout_width属性值(竖直则看layout_height),布局情况如下:

由于上述的button和checkBox均是wrap_content,因此Button和Checkbox获得的空间仅够绘制自身。
如图可以看出,LinearLayout还会有一部分剩余空间。

第二步,LinearLayout按照layout_weight属性值进行剩余空间的分配,
由于上述代码中Button和Checkbox的weight值一致,于是二者将平分额外的空间。
此时布局如下:

layout_weight的值越大,组件获取剩余空间的比例越多。
例如假设Button的layout_weight为2,Checkbox的layout_weight的值仍为1,那么Button将获得剩余空间的2/3.

根据layout_weight的工作原理,我们可以看出:
如果试图让父布局完全按照layout_weight来分配子组件可用的空间,那么就要跳过上述第一步.
即设置layout_width或layout_height为0dp.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值