设为首页 加入收藏

TOP

Android中 android:layout_weight 属性 完美解释
2014-11-24 03:11:41 来源: 作者: 【 】 浏览:2
Tags:Android android:layout_weight 属性 完美 解释

linearLayout中包含有weight的child时,linearLayout会measure两次:


设屏幕宽度为X


第一次:button1 的measuredWidth为X, button2也为X (因为用了weight,所以linearLayout每次measure child时不考虑前一个已经占用的大小),total_width为2X


第二次:计算delta=x-total_width=-x, 然后会将button1的宽度设为 x+delta*1/3=0.66x, button2的宽度为 x+delta*2/3=0.33x (不知道这是讲什么东西,一头雾水)


那首先分析一下当layout_widtd属性设置为fill_parent的时候,即充满父布局,当然意思是这个控件要根据weight的设置尽可能的大,因此,依上例而论,button1的weight设为1,button2的weight设置为2.即button的优先级最高,因此,要填充父布局就要button1先来填充,尽可能的大,那这个尽可能又是多少呢,这就要综合Layout里其他控件的weight值了,然后做一下运算,button1占据2/3,button2占据1/3.你也可以把button2设置为一个非常大的数,比如2000,此时在Graphical Layout模式下可以看到button1填充满了整个宽度,而看不到button2的影子,事实上button2还是存在的,你把鼠标指向button1的后面就可以看到一个长长的竖条,那个就是button2,已经非常非常小了。


因此,在layout_width设置为fill_parent的时候,weight权值越小所代表的是你的控件要优先尽可能的大。


接着是当layout_weight设置为wrap_content的时候,即适应内容的宽度,意思是这个控件要尽可能的小,只要能把内容显示出来就可以了,同样的,如果把button1和button2的layout_weight设置为wrap_content后,button1的weight为1,button2的weight为2.那么button1要优先尽可能的小,而button2也要尽可能的小,只是优先级不一样,因为设置了weight,所以这两个控件总的宽度要填满父佈局的宽度,所以就又要计算每个控件所占据的大小,此时,button1的优先级较高,共有两份,一份1/3,一份2/3,button1要尽可能的小,那button1当然要选1/3,因此,我们看到的效果反而是button2佔据的较大。这里要说的是如果把权值同样做如下设置:button1为1,button2为2000,那button1是不是就要佔据1/2000的空间呢?这么理解就错了,刚才说了,要尽可能的小,但这个小是有一个限度的,那就是wrap_content,就是还要是内容完完整整的显示出来,同样的,尽可能的大也是有一个限度的,那就是父佈局的宽度。因此,在layout_width设置为wrap_content的时候,weight所代表的是你的控件要优先尽可能的大。


所以,要对weight做了解,要深深的理解下面两句话:


在layout_width设置为fill_parent的时候,layout_weight所代表的是你的控件要优先尽可能的大,但这个大是有限度的,即fill_parent.


在layout_width设置为wrap_content的时候,layout_weight所代表的是你的控件要优先尽可能的小,但这个小是有限度的,即wrap_content.


layout_height 同 layout_width.


下面来贴几张图,加以说明:


1. layout_width="fill_parent", button1的weight=1,button2的weight=2;


Android中 android:layout_weight 属性 完美解释


2.layout_width="fill_parent", button1的weight=1,button2的weight=2000;


Android中 android:layout_weight 属性 完美解释


-----------------------------------------------------------------------------------


3.layout_width="wrap_content", button1的weight=1,button2的weight=2;


Android中 android:layout_weight 属性 完美解释


4.layout_width="wrap_content", button1的weight=1,button2的weight=2000;


Android中 android:layout_weight 属性 完美解释


】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
分享到: 
上一篇Android屏幕分辨率、密度的正确获.. 下一篇Android layout_weight用法图解

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

·哈希表 - 菜鸟教程 (2025-12-24 20:18:55)
·MySQL存储引擎InnoDB (2025-12-24 20:18:53)
·索引堆及其优化 - 菜 (2025-12-24 20:18:50)
·Shell 中各种括号的 (2025-12-24 19:50:39)
·Shell 变量 - 菜鸟教 (2025-12-24 19:50:37)