tao123 hkAndroid中android:layout_weight属性

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

  设屏幕宽度为X

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

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

  那我现在对这句话重新概括一下:“因为设置了button1的权重最小,所以它占用的布局优先级就越高”,也许在Android里面布局并没有优先级之说,我这里只是为了说明问题,自己定义的,所以朋友们不要拍砖。

  那首先分析一下当layout_widtd属性设置为fill_parent的时候,即充满父布局,当然意思是这个控件要根据weight的设置尽可能的大,因此,依上例而论,button1的weight设为1,button2的weight设置为2.即button的优先级最高,因此,要填充父布局就要button1先来填充,尽可能的大,那这个尽可能又是多少呢,这就要综合Layout里其他控件的weight了,然后做一下运算,button1占据2/3,button2占据1/3.你也可以把button2设置为一个非常大的数,比如2000,此时在GraphicalLayout模式下可以看到button1填充满了整个宽度,而看不到button2的影子,tao123 hk事实上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.

相关链接:

·2016lspl夏季赛INGvs2144D比赛视频淘宝权极限四杀2016/7/17taob tv