原文地址:http://hi.baidu.com/wei_chou/item/04b51be1abb1e316595dd853
在网上搜索了很多关于layout_weight的文章,众说纷纭,且都不准确。后来自己动手测试,通过分析计算得出以下结论:
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="0"
android:orientation="horizontal" >
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="4"
android:text="Button01"/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="Button02"/>
<Button
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="Button03"/>
</LinearLayout>
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="wrap_content"
android:layout_weight="0"
android:orientation="horizontal" >
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="3"
android:text="Button01"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="2"
android:text="Button02"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_weight="5"
android:text="Button03"/>
</LinearLayout>
W = W1 + L*P = w/5 + 2w/5 * 0.3 = 0.32w; //增加了0.12w
P = 2 / (3+2+5) = 0.2;
W = W1 + L*P = w/5 + 2w/5 * 0.2 = 0.28w; //增加了0.08w
P = 5 / (3+2+5) = 0.5;
W = W1 + L*P = w/5 + 2w/5 * 0.5 = 0.4w; //增加了0.2w
W = W1 + L*P = w + (-2w) * 0.3 = 0.4w; //减少了0.6w
P = 2 / (3+2+5) = 0.2;
W = W1 + L*P = w + (-2w) * 0.2 = 0.6w; //减少了0.6w
P = 5 / (3+2+5) = 0.5;
W = W1 + L*P = w + (-2w) * 0.5 = 0; //宽度为0,所以不显示
3、若不设置 LinearLayout 的 weightSum 以及所有子组件的 layout_weight 值,即两者的值都为0,则将要出界的组件的尺寸将会被调整。规则如下:所有值为 wrap_content
或 fill_parent
的组件,若按其正常尺寸,有部分在父组件边界内而部分在父组件边界外的,则将其尺寸调整到正好容纳在边界之内;完全在边界外部的组件将会隐藏,即宽或高为0;所有值不为 wrap_content
或 fill_parent之外
的组件,即有固定尺寸的,如100dp,则无论在边界内外都按固定尺寸显示。
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="wrap_content" android:orientation="horizontal"> <View android:layout_width="0px" android:layout_height="0px" android:layout_weight="1" /> <Button android:layout_width="wrap_content" android:layout_height="400dp" android:text="按 钮0" /> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="按 钮1" /> <Button android:layout_width="fill_parent" android:layout_height="fill_parent" android:text="按 钮2" /></LinearLayout>
@Override
protected void onMeasure(int widthMeasureSpec, int heightMeasureSpec) {
widthMeasureSpec = MeasureSpec.makeMeasureSpec(0, MeasureSpec.UNSPECIFIED);
super.onMeasure(widthMeasureSpec, heightMeasureSpec);
}
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/13400.html