简介
在Android系统中控件有5种布局规则:线性布局(LinerLayout)、相对布局(RelativeLayout)、帧布局(FrameLayout)、表格布局(TableLayout)、绝对布局(AbsoluteLayout)。(可能我的课本有点旧了,网上说有六种)
LinearLayout线性布局,可以设置水平和垂直两个方向,(默认为水平方向)。
属性
列举一些比较冷门的属性,比如宽、高、id这些就不列举出来了。几个需要注意的属性:
orientation
设置容器(子控件)存放的方式(方向)layout_weight
设置权重(等比例划分父元素剩余空间,用的比较多)
代码演示
接上一篇博客,创建第一个安卓应用。在其基础上进行代码演示。
项目(app)的布局文件都存放在工程文件夹/项目文件夹/src/main/res/layout/
。当前这个app只有一个页面,我们打开activity_main.xml文件打开。双击第二行的标签名,将其该为LinearLayout即线性布局。右侧点击Preview即可看到实时效果预览。跟HTML有点不一样,各个属性前边都有一个android:
,属性之间使用换行隔开不需要使用;或,
。
orientation属性
orientation属性有两个值可选,horizontal
水平和vertical
垂直(记忆小窍门:V可看作是向下的箭头,垂直方向包括上下)。
现在往里边添加一个<LinearLayout></LinearLayout>
标签(线性布局),不设置orientation的属性。再添加三个<View/>
标签进去,我们可以看到线性布局默认的方向为水平即android:orientation=“horizontal”
,且当放置水平方向满屏时不会自动换行。
默认为水平方向布局,现在更改为垂直方向vertical
。(也是一样不会自动换行)
在外边添加<View/>
标签时,会被挤出去。(当放置水平方向满屏时不会自动换行)
对齐
对齐使用gravity
属性(线性布局特有),可以设置水平方向居中对齐center_horizontal
、垂直方向居中对齐center_vertical
、两个方向都居中对齐center
。
宽高&权重
宽layout_width
,高layout_height
,权重layout_weight
(可能其他书不这么叫)。由于安卓设备的特殊性(太多了),官方建议使用单位dp
代替px
,想深入了解dp的点这里。
宽高,值可以是数字+dp
,match_parent
,wrap_content
。权重,值为数字。
match_parent
:强制性地使视图扩展至父元素大小。可以理解为占满父元素空余的空间。wrap_content
:自适应大小,强制性地使视图扩展以便显示其全部内容。根据内容自适应调整。(见下图)
权重layout_weight
是一个很有用的属性,父元素先将子元素布局所占用的空间减去剩下的空间(有的话)再通过权重分配给子元素。深入了解layout_weight
:传送门。
那具体怎么使用呢?比较常用的就是均分父元素的空间了。或按照某个比例来占用父元素的空间。如下图,再添加两个<LinearLayout></LinearLayout>
标签,修改父元素的线性布局方向为垂直方向。第一个标签设置了高度为200dp(没设置权重),所以新添加的两个标签设置一样的权重之后它们就会均分剩下的空间。(父元素是垂直方向线性布局的所以这里是垂直方向均分剩余空间)
如果给第一个标签添加一样的权重,那么它所占的空间将会是原有200dp+剩下空间/3
,看下图明显比下边两个标签大。
把第一个标签设置的高度值设置为0,则三个标签会在垂直方向均分整个手机屏幕。
更详细教程:传送门