从零开始手把手教你安卓开发

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_widthlayout_height 属性是控制控件的宽度与高度,这两个属性可以也必须在任意控件中声明,可填写:

  • match_parent:撑满父布局 即与其父布局同宽/高
  • wrap_content:自适应内容 即根据子控件自适应宽/高
  • 指定数值:指定宽/高为填写的数值个单位长度

说到这,就得提一下单位长度了,安卓中,有以下几种单位长度:

  • dp:屏幕密度无关像素 最常用 确保UI元素在不同设备上显示相同
  • sp:与dp相同 不过用在文字大小上 会随用户设置的系统字体大小进行缩放
  • px:屏幕密度有关像素 在不同设备上显示不同
  • pt:1pt=1/72英寸 属于物理尺寸 一般不用
  • in:英寸 属于物理尺寸 一般不用
  • mm:毫米 属于物理尺寸 一般不用

在实际使用中,通常只选择dp与sp,虽然有其他单位,但显示效果不好,一般很少或根本没人用。

若您还是容易混淆dp与sp,只需记住这个口诀:遇到文字sp 其他全都用dp


回到正题,以下为线性布局垂直与水平排列子控件的示例:

  • 垂直

4.2-1.png

  • 水平

4.2-2.png


那我们再来看看子控件是怎么通过权重分配的

首先,根据线性布局的方向,水平布局就将 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>

效果应为这样:

4.2-3.png


除此之外,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.2-4.png


以上,就是线性布局及其子控件的基本内容,更深层次的内容在以后的学习中自然会积累。那么,在 4.3 中我们将学习相对布局(RelativeLayout),敬请期待!

© 2026 小满. All rights reserved.
分类: 从零开始手把手教你安卓开发 标签: 暂无标签

评论

暂无评论数据

暂无评论数据

目录