Layout_weight用法

2016-03-09  本文已影响193人  shakesbears

例子:如果布局水平方向有三个TextView,代码如下:

<TextView

android:text="111111111111"

android:background="#ff00"

android:layout_weight="1"

android:layout_width="0dp"

android:gravity="center"

android:layout_height="48dp"/>

<TextView

android:text="2"

android:background="#ffe100"

android:layout_weight="2"

android:layout_width="0dp"

android:gravity="center"

android:layout_height="48dp"/>

<TextView

android:text="3"

android:background="#0004ff"

android:layout_weight="3"

android:layout_width="0dp"

android:gravity="center"

android:layout_height="48dp"/>

效果如下:

可以看到虽然三个控件不是齐平的,但是三个控件中的文本的第一行是齐平的

这是因为TextView在LinearLayout中会参考baseLine(基线),要想使控件对齐,只要在LinearLayout中加上

android:baselineAligned="false"

即可。注意在TableLayout中不可行

若控件宽度不是设定为0而是wrap_content,则先按照控件声明的尺寸进行分配,再将剩下的尺寸按weight分配(两个步骤)

若把三个TextView的宽度都设为match_parent

设外层LInearLayout的width为10,则剩余的尺寸为:

10-10*3=-20

TextView1:10+(-20)/(1+2+3)=20/3

TextView2:10+(-20)*2/(1+2+3)=10/3

TextView3:10+(-20)*3/(1+2+3)=0 显示不出来

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

在LInearLayout中设置android:weightSum=""属性可以设置weight的总值,如果布局中只有一个TextView控件的layout_weight=1且weightSum=2,则可占一半,如果还有其他的控件也可以分配,但是weight总值不能超过weightSum的值,否组不会显示出来

所有layout_开头的属性都是交由父容器去获取设置的,所以layout_gravity是设置控件在父类容器中的位置,而layout_gravity是文本对于控件的位置

Layout_开头都是交给父容器,没有的都是本身的属性

上一篇下一篇

猜你喜欢

热点阅读