Android中关于android:layout_weight的分析【转】

之前做过的Android项目,发现layout_weight权重字段,不太好调整,因此在网上找了资料,发现有一篇文章写的不错,正文如下:

android:layout_weight是定义一个控件的权重,也就是它的重要性的一个参数。网上关于其用法有两种说法:

一是值越大,重要性越低,所占用的空间越小;

二是值越大,重要性越高,所占用的空间越大

其实这两种情况都不太准确,第一种情况与android:layout_height(注:这里方向是竖直,如果方向设为水平,刚取决与android:layout_weight)的取值有关,如果设为fill_parent,刚第一种情况成立(注:只有此种情况下成立)

如果设为0dp(包括0px等等),刚第二种情况成立。(这里补充一点特殊的:如果我不设置为0dip,我设置成两个固定的值,比如下图上下两个LinearLayout的height分别设置成160dip,160dip,但是加起来不超过整个屏幕,或者故意超过整个屏幕,结果会怎么样?在这种情况下,首先会保证两个LinearLayout的固定高度,然后如果没有占满整个屏幕,则剩下的空间按照两个的权重(正比)来分配,如果超过呢,也会将超出的高度按照权重均分到两个LinearLayout,即减相对应的值,)

  举两个例子,(1)假设屏幕为480x320,且让应用程序去掉标题栏并全屏,上下两个LinearLayout权重分别为2和3,高度都设为140dip,刚还剩下480-140-140=200(dip)的高度未使用,则实例LinearLayout的高度为140+200*2/(2+3)=220,140+200*3/(2+3)=260

  (2)超过屏幕,高度都设为290dip,刚会多出480-290*2=100,实例高度为290-(100*2/(2+3))=250,290-(100*3/(2+3))=230

如果不设,刚默认为0

(自己的理解:如果控件的属性都设置为MATCH_PARENT,为什么weight值越小,重要性越大呢?因为MATCH_PARENT的高度为整个屏幕高度,设有2个控件,weight值分别为2和3,则总高度为 屏幕高度*2,超出一个 屏幕高度,即480*2-480=480,然后超出的部分要往回减,即第一个控件的实际高度为 480-480*2/5=480*3/5,而第二个控件的实际高度为480*2/5,所以weight值为2的控件的高度反而比weight值为3的控件高度高)

假设你要把屏幕分成3份,比重分别人x y x(即两边一边多,中间一边多),则假设其weight值分别为a b a,则公式
x=1-2*a/(2a+b)=b/(2a+b) 
y=1-2*b(2a+b)=(2a-b)/(2a+b)
经过换算可以得到(假设2a+b=1的情况下)
b=(1-y)/2
a=(1+y)/4

posted @ 2013-07-04 11:07  扁扁007  阅读(201)  评论(0)    收藏  举报