你可能不知道的layout_weight

原创 2016年08月31日 11:08:21

说到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啦。










Android中你也许不知道的线性布局Layout_weight属性权重比例分配原理

也许你正在使用这个属性Layout_weight权重,没错就是它,很多人问这有什么可讲的,不就是按照那样用吗?其实任何一东西的存在都有其原因。仔细研究你会有不同的感受,当然,肯定也会有很多大神知道,小...

透析Android 中 权重使用及分配规则(layout_weight)

平常我们在使用线性布局LinearLayout的时候,会用到权重layout_weight,将控件的宽度(或高度)设为0,再设置它的权重即可,控件呈现呈现出的大小与权重比例相吻合。方法简单,自是没有什...

Android之权重layout_weight的真正用法

layout_weigh——权重总的来说就是屏幕的剩余空间按比例分配 首先声明只有在Linearlayout中,该属性才有效。之所以android:layout_weight会引起争议,是因为在设置该...

layout_weight设置垂直分布的三个布局

今天在做手机商城订单改版,结果被一个Scrollview深深的伤害了…… 首先问题是这个,垂直分布的三个布局: 本来预计的效果图是这样的: 结果是最下面的LinearLayout死活不显...

Android 对Layout_weight属性完全解析以及使用ListView来实现表格

转载请注明出处:http://blog.csdn.net/xiaanming/article/details/13630837 今天主要说的是对Layout_weight属性的完全解析,以及利用...
  • jinmv
  • jinmv
  • 2015年04月07日 15:11
  • 162

layout_weight如何计算比例?

首先,要知道layout_height和layout_width的优先级大于layout_weight,如果

Layout_weight属性的使用与理解

在定义该自定义控件的布局时使用LinearLayout布局中的Layout_weight属性,

layout_weight 小白的理解之我的地盘听我的!(二)

上篇文章比较详细的写了写

布局属性layout_weight解析

关于Layout Weight,我们先来看一下官方释义。 LinearLayout通过子View的android:layout_weight属性,来为子View分配权重。layout_weight...

layout_weight 小白的理解之我的地盘听我的!(一)

"weight"顾名思义是权重的意思,
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:你可能不知道的layout_weight
举报原因:
原因补充:

(最多只允许输入30个字)