![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=1739453382-Mj20Uhefy630jaoqm1b02yJTFqJ7w6m2-0-3e00293304e5779f34352c97b858386a)
2-2 线性布局介绍
![](https://epubservercos.yuewen.com/28BC1F/27087516004948706/epubprivate/OEBPS/Images/34_02.jpg?sign=1739453382-WKFIIqEOLgtMMvzDQluVwzNsPXisz8JY-0-ec08a6eeea6fdb2b4223d4aadd654e97)
![](https://epubservercos.yuewen.com/28BC1F/27087516004948706/epubprivate/OEBPS/Images/35_01.jpg?sign=1739453382-DcTlsbmodaB38diZbIdxBMtXPkFVP8Hj-0-4f5fd2d6bd435f70de7e135c9a35fda4)
![](https://epubservercos.yuewen.com/28BC1F/27087516004948706/epubprivate/OEBPS/Images/36_01.jpg?sign=1739453382-n1DDWfIIaEItM06598Ea2b1j86idXJ1k-0-a61342e48878432f6a89dd8d9fdd1aad)
上面线性布局示例的效果如图2-4所示。第一组按钮是按权重呈现的,而第三组的最后一个按钮看不到了,这是控件宽度设置不当所导致的权重计算偏差造成的。
![](https://epubservercos.yuewen.com/28BC1F/27087516004948706/epubprivate/OEBPS/Images/36_02.jpg?sign=1739453382-JZqe4Hnh97R3dYBknpEua2rtsZyxD1fp-0-d51286f05fa3d80a2c978c759816463f)
图2-4 线性布局效果