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:视图内部的留白(影响内容与视图边界的距离)。