布局 (Layout)

温馨提示:本文最后更新于2025-11-07 10:56:59,某些文章具有时效性,若有错误或已失效,请在下方留言

每个布局文件只包含一个根元素,该元素必须是一个View或者 ViewGroup对象。一旦定义了根元素,就可以添加其它布局对象或者小组件作为子元素,以逐步构建定义布局的视图层级结构。

布局文件加载

当编译app的时候,每个XML布局文件都被编译成一个 View 资源。在应用代码的 Activity.onCreate() 回调方法里加载这个布局资源。

通过调用 setContentView() 方法来实现,并将布局资源的引用以以下形式传递给它:R.layout.layout_file_name

public class MainActivity extends AppCompatActivity {
    
    // onCreate 方法是Android框架在Activity启动时调用方法。
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
    }
}
布局文件加载
布局文件加载

常见布局

线性布局(Linear Layout)

一种将其子视图按单一的水平或垂直方向排列的布局。当窗口的内容长度超过屏幕长度时,它会自动创建一个滚动条(scrollbar)。

<?xml version="1.0" encoding="utf-8"?>
<!--
android:orientation="vertical" 设置排列的方向
-->
<LinearLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Text Number 1"
        android:textSize="18sp"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Text Number 2"
        android:textSize="18sp"/>

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Text Number 3"
        android:textSize="18sp"/>

</LinearLayout>

效果图,如下所示

图片[2]-布局 (Layout)-Stewed Noodles 资源
线性约束

相对布局(Relative Layout)

允许你根据其它子视图(例如:子视图 A 位于子视图 B 的左侧)或 父视图(例如:与父视图的顶部对齐)来指定子视图的位置。

<?xml version="1.0" encoding="utf-8"?>
<!--
    layout_below: 在某个视图的下方
    layout_centerHorizontal: 水平居中
    layout_alignLeft: 左对齐
-->
<RelativeLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:layout_centerHorizontal="true"
        android:id="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Text Number 1"
        android:textSize="32sp"/>

    <TextView
        android:layout_alignLeft="@+id/text1"
        android:id="@+id/text2"
        android:layout_below="@+id/text1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Text Number 2"
        android:textSize="32sp"/>
</RelativeLayout>

效果图如下所示

图片[3]-布局 (Layout)-Stewed Noodles 资源
相对布局

约束布局(Constraint Layout)

它允许你在 不使用嵌套视图组(即保持扁平的 View 层级) 的情况下,创建大型且复杂的布局。它与 RelativeLayout(相对布局) 类似,所有视图都根据 与同级视图或父布局之间的关系 来进行定位。但 约束布局 比 相对布局 更加灵活,并且在 Android Studio 的布局编辑器 中更易于使用。

ConstraintLayout 基于视图之间的关系工作,这些视图被称为约束。在 ConstraintLayout 中,最核心的部分就是 创建和设置这些约束。

XML中的约束属性:

app:layout_constraint<SOURCE_ANCHOR>_to<TARGET_ANCHOR>of=”<TARGET_ID>
<SOURCE_ANCHOR>、<TARGET_ANCHOR>的取值:start、end、top、bottom

<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <TextView
        android:id="@+id/firstTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="68dp"
        android:text="你好世界!"
        android:textSize="32sp"
        app:layout_constraintEnd_toEndOf="@+id/secondTextView"
        app:layout_constraintHorizontal_bias="0.486"
        app:layout_constraintStart_toStartOf="@+id/secondTextView"
        app:layout_constraintTop_toBottomOf="@+id/secondTextView" />

    <TextView
        android:id="@+id/secondTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="56dp"
        android:text="另一个 TextView"
        android:textSize="32sp"
        app:layout_constraintStart_toStartOf="@+id/thirdTextView"
        app:layout_constraintTop_toBottomOf="@+id/thirdTextView" />

    <TextView
        android:id="@+id/thirdTextView"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginStart="60dp"
        android:layout_marginTop="96dp"
        android:text="欢迎来到我们的课程"
        android:textSize="32sp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />


</androidx.constraintlayout.widget.ConstraintLayout>

效果如下图所示

图片[4]-布局 (Layout)-Stewed Noodles 资源
约束布局
© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容