例子:如果布局水平方向有三个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_开头都是交给父容器,没有的都是本身的属性
网友评论