从零开始手把手教你安卓开发-4.2 XML中的常用布局-LinearLayout
从零开始手把手教你安卓开发
4.2 XML中的常用布局-LinearLayout
4.2.1 线性布局的布局规则是什么?
LinearLayout(线性布局)是Android中最常用的布局之一,虽然谷歌最推荐约束布局,但线性布局通常被认为最方便最好用的布局。正如它的名字一样,它将子控件按照一条线,也就是水平或垂直方向依次排列。此外,线性布局也是唯一一个原生支持子控件按照权重分配的布局。
4.2.2 线性布局及其子控件的使用示例
线性布局需要一个特殊的参数
android:orientation=""这个参数用来控制线性布局的方向,可填写:
- vertical:垂直方向
- horizontal:水平方向
这是一个线性布局的示例:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
</LinearLayout>其中, layout_width 与 layout_height 属性是控制控件的宽度与高度,这两个属性可以也必须在任意控件中声明,可填写:
- match_parent:撑满父布局 即与其父布局同宽/高
- wrap_content:自适应内容 即根据子控件自适应宽/高
- 指定数值:指定宽/高为填写的数值个单位长度
说到这,就得提一下单位长度了,安卓中,有以下几种单位长度:
- dp:屏幕密度无关像素 最常用 确保UI元素在不同设备上显示相同
- sp:与dp相同 不过用在文字大小上 会随用户设置的系统字体大小进行缩放
- px:屏幕密度有关像素 在不同设备上显示不同
- pt:1pt=1/72英寸 属于物理尺寸 一般不用
- in:英寸 属于物理尺寸 一般不用
- mm:毫米 属于物理尺寸 一般不用
在实际使用中,通常只选择dp与sp,虽然有其他单位,但显示效果不好,一般很少或根本没人用。
若您还是容易混淆dp与sp,只需记住这个口诀:遇到文字sp 其他全都用dp。
回到正题,以下为线性布局垂直与水平排列子控件的示例:
- 垂直

- 水平

那我们再来看看子控件是怎么通过权重分配的
首先,根据线性布局的方向,水平布局就将 layout_width 设为0dp ,垂直布局就将 layout_height 设为 0dp 。接着添加一个 layout_weight 属性并自定义权重比,这是设置权重的关键。
那么系统是怎么把权重比转为长度的呢?遵循着这一套计算公式:
最终长度=初始长度+剩余空间/所有权重和×控件权重比
其中,剩余空间 是指 线性布局长度-所有子控件的初始长度总和 。但由于初始长度设为了0dp,所以就相当于线性布局的长度。
举个例子,现在有3个子控件,它们的权重比分别被设为了1、2、1,那么我们来分别计算一下:
- 第1个:0dp+100%/(1+2+1)*1=25%
- 第2个:0dp+100%/(1+2+1)*2=50%
- 第3个:0dp+100%/(1+2+1)*1=25%
【为方便讲解使用百分比 正常应使用实际长度】
写成XML应该是这样:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="horizontal">
<!-- 第1个子控件 -->
<View
android:layout_width="0dp"
android:layout_height="100dp"
android:layout_weight="1"
android:background="#FF0000"/>
<!-- 第2个子控件 -->
<View
android:layout_width="0dp"
android:layout_height="100dp"
android:layout_weight="2"
android:background="#00FF00"/>
<!-- 第3个子控件 -->
<View
android:layout_width="0dp"
android:layout_height="100dp"
android:layout_weight="1"
android:background="#0000FF"/>
</LinearLayout>效果应为这样:

除此之外,layout_gravity 也是线性布局子控件的一个关键属性,它用于让子控件在线性布局中进行对齐。同样的,layout_gravity也有许多的值,基本值有如下几个:
- top:顶部对齐
- bottom:底部对齐
- left:左对齐(已被start取代)
- right:右对齐(已被end取代)
- start:开始对齐
- end:结束对齐
- center:居中对齐
- fill:完全填充
除了这些基本值,还有复合值。所谓复合值,就是将多个基本值结合在一起并使用 "|"(非短路或) 进行连接,体现出两个基本值组合在一起的功能,如:
- start|top:左上
- end|bottom:右下
- ...
同样举个例子,现在有3个子控件,它们分别被设为了左上、居中、右下。
写成XML应该是这样:
<LinearLayout
android:layout_width="match_parent"
android:layout_height="match_parent"
android:orientation="vertical">
<!-- 第1个子控件 -->
<View
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#FF0000"
android:layout_gravity="start|top"/>
<!-- 第2个子控件 -->
<View
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#00FF00"
android:layout_gravity="center"/>
<!-- 第3个子控件 -->
<View
android:layout_width="100dp"
android:layout_height="100dp"
android:background="#0000FF"
android:layout_gravity="end|bottom"/>
</LinearLayout>效果应为这样:

以上,就是线性布局及其子控件的基本内容,更深层次的内容在以后的学习中自然会积累。那么,在 4.3 中我们将学习相对布局(RelativeLayout),敬请期待!
© 2026 小满. All rights reserved.
本文系作者 @小满 原创发布在孙哥博客站点。未经许可,禁止转载。
暂无评论数据