Android学习之线性布局。

LinearLayout 简介

LinearLayout 是 Android 中最基本、最常用的布局之一。它的核心特点是将其内部的子视图(Views)按照 单一方向(水平或垂直)依次排列。就像一个队列,子视图一个接一个地放置。

1、方向性 (Orientation):通过 android:orientation 设置,默认为水平方向。

垂直 (vertical): 子视图从上到下依次排列。每个子视图占据一行。

水平 (horizontal): 子视图从左到右依次排列。每个子视图占据一列。

2、权重 (Weight):通过 android:layout_weight 属性,可以指定子视图在 LinearLayout 剩余空间中所占的比例。

权重属性是实现复杂布局(如按比例分配空间)的关键。

通常需要配合 android:layout_width 或 android:layout_height 设置为 0dp (或 0dip) 来使用,表示该方向上的大小完全由权重决定。

例如,两个按钮水平排列,各占一半宽度:

XML 复制代码
    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content">
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="权重第一个按钮" />
        <Button
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="权重第二个按钮" />
    </LinearLayout>

权重的值表示相对权重。如果两个视图权重都是 1,则它们平分剩余空间。如果一个权重是 2,另一个是 3,则前者占据剩余空间的 2/5,后者占据3/5。

XML 复制代码
    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:orientation="vertical">
        <Button
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="2"
            android:text="权重第一个按钮" />
        <Button
            android:layout_width="wrap_content"
            android:layout_height="0dp"
            android:layout_weight="3"
            android:text="权重第二个按钮" />
    </LinearLayout>

3、指定视图的宽度和高度:

android:layout_height:指定子视图的宽度。

常用值:match_parent (填满父容器宽度), wrap_content (根据内容自适应宽度), 具体数值 (如 100dp), 0dp (配合 layout_weight 使用)。

android:layout_weight:指定子视图的高度。

常用值:match_parent, wrap_content, 具体数值, 0dp (配合 layout_weight 使用)。

如上所述,用于在剩余空间中按比例分配大小。仅在设置了 android:layout_width 或 android:layout_height 为 0dp 的方向上生效。

4、设置视图对齐方式

android:gravity:作用于子视图本身:控制子视图内部的内容(如文本、图片)在其边界内的对齐方式。

例如:center, center_vertical, center_horizontal, top, bottom, left, right 等。可以用 | 组合,如 center_vertical|right。

layout_gravity:作用于父容器 (LinearLayout):控制子视图在其父容器分配的空间内的对齐方式。

例如,在一个水平排列的 LinearLayout 中,设置某个子视图的 layout_gravity="center_vertical" 可以让该子视图在其分配的高度空间内垂直居中。

常用值同 gravity。注意:layout_gravity 的效果会受到 LinearLayout 方向的影响。例如,在水平 LinearLayout 中,layout_gravity="right" 可能无法生效,因为子视图是按顺序从左向右排列的。

5、设置内边距:

padding 用于控制整个布局的内边距,影响所有子视图的排列和位置;

padding 设置在线性布局上时,会在布局的四周(上、下、左、右)添加一个固定的空间。这会让所有子视图与布局边界保持一定距离,避免内容紧贴边缘,提高可读性和美观性。

影响布局尺寸:添加 padding 会增加布局的总尺寸。例如,如果布局宽度为 100dp,padding 设为 10dp,那么实际内容区域的宽度会变为 80dp(左右各减 10dp)。

与 margin 的区别:padding 是布局内部的空间,而 margin 是子视图之间的外部空间。在线性布局中,padding 作用于整个布局,而 margin 作用于单个子视图。

设置 padding:在 Android 的 LinearLayout 中,padding 可以通过 XML 属性或代码设置:

XML 属性:直接在布局文件中定义,常用属性包括:

android:padding:设置所有方向的内边距(统一值)。

android:paddingLeft, android:paddingTop, android:paddingRight, android:paddingBottom:分别设置各个方向的内边距。

单位:通常使用 dp(density-independent pixels)作为单位,确保在不同屏幕尺寸下表现一致。

例如:整个 LinearLayout 有 16dp 的内边距,所有子视图(TextView)会自动与布局边界保持 16dp 的距离

XML 复制代码
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="vertical"
    android:padding="16dp"> <!-- 设置所有方向的内边距为 16dp -->
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="文本1"/>
    
    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="文本2"/>
</LinearLayout>

6、定义视图的外边距(视图边界与外部元素的距离)。

属性类型:

layout_margin:统一设置四个方向(上、下、左、右)的边距。

layout_marginTop、layout_marginBottom、layout_marginLeft、layout_marginRight:分别设置特定方向的边距。

在布局文件(如 activity_main.xml)中,通过 android:layout_margin 系列属性设置。

注意:

单位:建议使用 dp(与屏幕密度无关的单位),例如 16dp。

权重(weight):若子视图使用了 layout_weight,margin 会影响权重分配的计算空间。

margin与padding的区别:

margin:视图外部的留白(影响与其他元素的间距)。

padding:视图内部的留白(影响内容与视图边界的距离)。

相关推荐
Lei活在当下10 小时前
Codex 工程化实践指南:深入理解 AGENTS.md、SKILL.md 与 MCP
android·openai·ai编程
修炼者11 小时前
Toast的显示流程
android
simplepeng13 小时前
Room 3.0 KMP Alpha-01
android·kotlin·android jetpack
Lei活在当下14 小时前
Windows 下 Codex 高效工作流最佳实践
android·openai·ai编程
fatiaozhang952714 小时前
基于slimBOXtv 9.19.0 v4(通刷晶晨S905L3A/L3AB芯片)ATV-安卓9-完美版线刷固件包
android·电视盒子·刷机固件·机顶盒刷机·晶晨s905l3ab·晶晨s905l3a
私房菜15 小时前
Selinux 及在Android 的使用详解
android·selinux·sepolicy
一只特立独行的Yang15 小时前
Android中的系统级共享库
android
两个人的幸福online16 小时前
php开发者 需要 协程吗
android·开发语言·php
修炼者17 小时前
WindowManager(WMS)构建全局悬浮窗
android