关闭

你可能不知道的layout_weight

124人阅读 评论(0) 收藏 举报
分类:

说到layout_weight,大家一般都会说,这还不简单,不就是一个权重吗?

那看到这几行代码,大家觉得UI会是什么样的呢?

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="1111111111111"
        android:gravity="center"
        android:background="#44ff0000"
        />

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="2"
        android:text="2"
        android:gravity="center"
        android:background="#4400ff00"
        />

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="3"
        android:text="3"
        android:gravity="center"
        android:background="#440000ff"
        />

</LinearLayout>
结果却是:

为什么色块木有对齐?

真的木有对齐吗?其实第一排的1和2、3对齐了。

你知道吗?这都是LinearLayout的baseline惹的祸。

哈,有点意思吧,继续来,

如果把1的width改成wrap_content呢?


怎么样?这次你猜对了吗?

效果有点怪,为啥1的宽度比2还大?

揭秘:LinearLayout中的layout_weight属性首先按照控件声明的尺寸进行分配,再将剩下的尺寸按照weight进行分配。

哈,精彩仍在继续,

把1、2、3的width改成match_parent,这里我们另把3的weight改成2,结果呢?


什么鬼,

3个都匹配父控件,宽度显然不够,这时:

假设外层LinearLayout的width为480,按照揭秘:

剩余尺寸rest=480-480*3=-480*2;

故width(1)= 480(match_parent) + (-480*2)*(1/5)= 480*(3/5)

故width(2)=width(3)= 480(match_parent) + (-480*2)*(2/5)= 480*(1/5)

soga,原来如此!

结论:控件宽度 + 父控件剩余宽度*比例

现在不让大家猜了,问大家一个问题,如果在LinearLayout只有一个TextView控件,如何让它只占1/2的宽度?


大家先试一试,然后往下看:

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="horizontal" android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:weightSum="2"
    >

    <TextView
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_weight="1"
        android:text="1111111111"
        android:gravity="center"
        android:background="#44ff0000"
        />

</LinearLayout>
妙用LinearLayout的weightSum属性就可以搞定。

最后一个揭秘:很多人傻傻分不清楚layout_gravity和gravity的区别,只要记住layout_开头的都由layout父容器决定,若无则代表本身属性就ok啦。










0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:92048次
    • 积分:2877
    • 等级:
    • 排名:第12871名
    • 原创:167篇
    • 转载:223篇
    • 译文:2篇
    • 评论:11条