
上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。

2-2 线性布局介绍



上面线性布局示例的效果如图2-4所示。第一组按钮是按权重呈现的,而第三组的最后一个按钮看不到了,这是控件宽度设置不当所导致的权重计算偏差造成的。

图2-4 线性布局效果