![Android移动应用开发教程](https://wfqqreader-1252317822.image.myqcloud.com/cover/120/47684120/b_47684120.jpg)
上QQ阅读APP看本书,新人免费读10天
设备和账号都新为新人
2.2.1 线性布局LinearLayout
线性布局,顾名思义,是一种对放在其内的控件进行线性排列的容器控件。线性排列分为水平和垂直两个方向,使用属性android:orientation控制排列方向,设置值“vertical”为垂直方向、“horizontal”为水平方向,如果不设置该属性,则默认为水平方向排列。
线性布局内的控件尺寸可以设置宽高为固定值,也可以设置为相对宽/高。在排列方向上,可以结合子控件的权重属性android:layout_weight,根据权重比例在线性布局中排列子控件,实现控件自适应屏幕尺寸能力。但在极限条件下,比如屏幕尺寸过小,会造成控件压缩或控件不可见等现象。
要正确使用权重,需要将子控件大小设置为0dp。Android计算子控件在排列方向上的尺寸大小的公式,考虑了子控件的原始大小,计算公式如下:
最终尺寸=原始尺寸+(线性布局尺寸-所有子控件原始尺寸)*权重比例
可见,子控件大小设置为0dp,最易于按权重计算。如果子控件大小设置为match_parent,代表子控件长度和线性布局长度相同,计算的结果就不是想要的权重大小;如果设置为wrap_content,代表子控件大小与内容尺寸有关,计算结果也会有偏差。
一个线性布局的示例代码如下所示,3组线性布局中分别放3个按钮控件,3组线性布局中的按钮控件尺寸分别设置为0dp、wrap_content、match_parent,每组按钮的权重都按顺序设置为1、2、3。
![](https://epubservercos.yuewen.com/28BC1F/27087516004948706/epubprivate/OEBPS/Images/34_01.jpg?sign=1738898429-7IcrgxJdkT9wVyWptwql741o8ajK8Rp8-0-8dc548afee42222a4171e5480bb1604d)
2-2 线性布局介绍
![](https://epubservercos.yuewen.com/28BC1F/27087516004948706/epubprivate/OEBPS/Images/34_02.jpg?sign=1738898429-za2408Ikrtid5iw9RyWuXgA2i3wvwhAH-0-a01f2c5e84805e17f158e4d282c25fdd)
![](https://epubservercos.yuewen.com/28BC1F/27087516004948706/epubprivate/OEBPS/Images/35_01.jpg?sign=1738898429-V6WPigvtv2N68Vn14TPR4CIuwbg9RksW-0-5e293af651079a3730b3ba8dc0ac00d4)
![](https://epubservercos.yuewen.com/28BC1F/27087516004948706/epubprivate/OEBPS/Images/36_01.jpg?sign=1738898429-zfmizDgATcj0OmslgRkFpyFoUSMY9EWZ-0-133ffeacc8575cc26b7a36bf0f36ec8b)
上面线性布局示例的效果如图2-4所示。第一组按钮是按权重呈现的,而第三组的最后一个按钮看不到了,这是控件宽度设置不当所导致的权重计算偏差造成的。
![](https://epubservercos.yuewen.com/28BC1F/27087516004948706/epubprivate/OEBPS/Images/36_02.jpg?sign=1738898429-o06h0pOd6M59Zg0TBkrg9LDoB9rjvfsC-0-5e1ecc1135f63114bccf4831cfc0811d)
图2-4 线性布局效果