2.2.1 LinearLayout(线性布局)

LinearLayout 是 Android 中最常用的布局之一,它可以在水平或垂直方向上排列子 View,每个子 View 可以根据比例分配可用空间。本篇文章将详细介绍 LinearLayout 的使用方法、属性、缺点以及相应的案例说明。

## 一、LinearLayout 的使用方法

### 1.1 布局文件声明

```

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent">

```

上面的代码声明了一个 LinearLayout,并将它的高度和宽度都设置为 match_parent,使得该布局与父容器的大小相同。

### 1.2 子 View 的添加

在 LinearLayout 中添加子 View 的方法有两种:

#### (1) 手写布局文件添加

```

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Hello, Linear Layout" />

```

在上面的布局文件中,我们向 LinearLayout 中添加了一个 TextView,该 TextView 的宽、高设置为 wrap_content,即根据内容自适应大小。

#### (2) 通过 Java 代码添加

以下是通过 Java 代码向 LinearLayout 添加子 View 的示例代码:

```

LinearLayout linearLayout = findViewById(R.id.linearLayout);

TextView textView = new TextView(this);

textView.setText("Hello, Linear Layout");

linearLayout.addView(textView);

```

这段代码中,我们获取到了一个 LinearLayout 的实例 linearLayout,并且通过 new TextView(this) 创建了一个 TextView 的实例,设置了其文本属性后,再将其添加到了 LinearLayout 中。

### 1.3 方向属性

我们可以通过设置 android:orientation 属性来指定 LinearLayout 的方向。默认情况下,LinearLayout 的方向为垂直方向。

```

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal">

```

在上面的布局文件中,我们将 LinearLayout 的方向设置为水平方向。

### 1.4 权重属性

权重属性可以使子 View 根据比例分配可用空间。LinearLayout 中的子 View 可以设置 layout_weight 属性,指定其在整个布局中所占比例。

以下是具有权重的 LinearLayout 示例代码:

```

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="First Item"

android:layout_weight="1" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="Second Item"

android:layout_weight="2" />

```

在上面的代码中,我们向 LinearLayout 中添加了两个 TextView,第一个 TextView 的权重为 1,第二个 TextView 的权重为 2。这意味着,第二个 TextView 将占用比第一个 TextView 更大的空间。

### 1.5 居中属性

在 LinearLayout 中,我们可以通过设置一些属性,来使子 View 在垂直或水平方向上居中显示。以下是例子代码:

#### (1) 垂直居中

```

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

android:gravity="center_vertical">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Centered Text"/>

```

在上面的代码中,我们通过设置 android:gravity="center_vertical",使 TextView 在垂直方向上居中显示。

#### (2) 水平居中

```

xmlns:android="http://schemas.android.com/apk/res/android"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="horizontal"

android:gravity="center_horizontal">

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Centered Text"/>

```

在上面的代码中,我们通过设置 android:gravity="center_horizontal",使 TextView 在水平方向上居中显示。

## 二、LinearLayout 属性

LinearLayout 的属性可以分为两类:容器属性和子 View 属性。容器属性是指影响 LinearLayout 容器的属性,而子 View 属性是指影响 LinearLayout 内单个子 View 的属性。

### 2.1 容器属性

#### (1) android:orientation

该属性用于设置 LinearLayout 的方向,可选值为 vertical 和 horizontal,默认为 vertical(垂直方向)。

#### (2) android:gravity

该属性用于设置 LinearLayout 中所有子 View 的排列方式。可选值有:top、bottom、center_vertical、left、right、center_horizontal、center、fill_vertical、fill_horizontal 和 fill。其中 fill 可以填充整个 LinearLayout。

#### (3) android:baselineAligned

当 android:orientation 属性设置为 horizontal 时,该属性用于控制子 View 是否与基准线(baseline)对齐。当值为 true 时,让子 View 与基准线对齐;当值为 false 时,让子 View 以其底部为基准线对齐。

#### (4) android:baselineAlignedChildIndex

用于指定固定的子 View 作为基线子 View。该属性只有在 android:baselineAligned 属性为 true 时才起作用。

### 2.2 子 View 属性

#### (1) android:layout_weight

用于设置子 View 在布局中所占的比例。多个子 View 可以设置该属性,值越大占据的空间越多。该属性配合 android:layout_width 或 android:layout_height 属性使用,使得子 View 在按照权重分配可用空间时,能够占据适当的空间。

#### (2) android:layout_gravity

该属性用于控制子 View 在 LinearLayout 内的位置。可选值包括:top、bottom、center_vertical、left、right、center_horizontal、center 等。

#### (3) android:layout_margin

用于设置子 View 相对于父容器边缘的距离。

#### (4) android:layout_marginTop、android:layout_marginBottom、android:layout_marginLeft、android:layout_marginRight

分别用于设置子 View 相对于上、下、左、右边缘的距离。

#### (5) android:layout_width、android:layout_height

可选值有:match_parent、wrap_content、具体数值等。

## 三、LinearLayout 的缺点

LinearLayout 在布局较为简单的情况下,使用起来比较方便。但在布局复杂的情况下,使用 LinearLayout 可能会出现很多问题:

- 嵌套过多导致性能下降

- 权重属性设置过多可能会导致布局变慢

- 子 View 的水平和垂直方向属性无法同时控制

## 四、LinearLayout 案例说明

### 4.1 垂直布局

以下是一个简单的垂直布局:

```

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="vertical"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="TextView1" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="TextView2" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="TextView3" />

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:text="TextView4" />

```

### 4.2 水平布局

以下是一个简单的水平布局:

```

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="horizontal"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/btn1"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Button1"/>

android:id="@+id/btn2"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Button2"/>

android:id="@+id/btn3"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="Button3"/>

```

### 4.3 LinearLayout 权重

以下是一个使用 LinearLayout 权重的布局:

```

xmlns:android="http://schemas.android.com/apk/res/android"

android:orientation="horizontal"

android:layout_width="match_parent"

android:layout_height="match_parent">

android:layout_width="0dp"

android:layout_height="wrap_content"

android:text="Left Text View"

android:layout_weight="1"/>

android:layout_width="0dp"

android:layout_height="wrap_content"

android:text="Middle Text View"

android:layout_weight="2"/>

android:layout_width="0dp"

android:layout_height="wrap_content"

android:text="Right Text View"

android:layout_weight="1"/>

```

在上面的代码中,LinearLayout 中包含了三个 TextView,这三个 TextView 的 layout_weight 属性分别为 1、2 和 1。因此第二个 TextView 比其他两个 TextView 的宽度分别多了一倍。

## 总结

该文介绍了 LinearLayout 的使用方法、属性以及其相应的优缺点和案例说明。LinearLayout 是 Android 中最常用的布局之一,它可以实现水平和垂直方向上的子 View 排列,为开发者提供了很大的灵活性和可扩展性。但是在布局比较复杂的情况下,LinearLayout 可能会出现性能上的问题,需要开发者注意优化。 如果你喜欢我们三七知识分享网站的文章, 欢迎您分享或收藏知识分享网站文章 欢迎您到我们的网站逛逛喔!https://www.37seo.cn/

点赞(59) 打赏

评论列表 共有 1 条评论

用微笑来接纳所有背叛 9月前 回复TA

如果你觉得自己很牛B,那你一定是傻B。

立即
投稿
发表
评论
返回
顶部