3.0 Android布局管理器

3.0 Android布局管理器

3.2 View与ViewGroup

3.3 Android布局管理器

3.4 线性布局

3.5 约束布局

学习目标

了解--------------------View与ViewGroup五种常用布局

掌握--------------------线性布局常用属性,约束布局常用属性

重点--------------------线性布局,约束布局

3.2 View与ViewGroup

1. View与ViewGroup概述

Android的UI界面都是由View和ViewGroup及其派生类构建而成的。其中,View是所有UI组件的基类,而ViewGroup是容纳View及其派生类的容器,ViewGroup也是从View派生出来的。

ViewGroup作为容器盛装界面的控件,可以包含普通的View控件,也可以包含ViewGroup。

在这里插入图片描述

2. View与ViewGroup

View:视图,是用户接口组件的基本构建块,它在屏幕中占用一个矩形区域,它是所有UI控件的基类,比如TextView,ImageView。

ViewGroup :ViewGroup是一个特殊的View,能够容纳其它的View(子控件),它是布局和视图容器的基类。
在这里插入图片描述

3.3 Android布局管理器

0. 启动 App 的简略流程

在这里插入图片描述

1. Android布局管理器

在Android程序中界面是通过布局文件设定的,在每个应用程序创建时会默认包含一个主界面布局,该布局位于res/layout目录中。

实际开发中每个应用程序都包含多个界面,而程序默认提供的一个主界面布局无法满足需求,因此经常会在程序中添加多个布局。

在这里插入图片描述
activity_main.xml布局文件所在的位置

2.Android布局种类

在这里插入图片描述

3. Android布局的通用属性

Android系统提供的五种常用布局直接或者间接继承自ViewGroup,因此这五种常用布局也支持在ViewGroup中定义属性,这些属性可以看作是布局的通用属性。这些通用属性如下表所示:

控件属性功能描述
android:id设置当前布局的唯一标识
android:layout_width设置布局的宽度。值可以是具体的尺寸,如50dp,也可以是系统定义的值,如match_parent和wrap_content
android:layout_height设置布局的高度,值可以是具体尺寸或系统定义的值
android:background设置布局的背景
android:layout_margin设置当前布局与屏幕便捷或周围控件的距离
android:padding设置当前布局与布局中控件的距离

3.4 线性布局

1. 线性布局

线性布局**(LinearLayout)**主要以水平或垂直方式来显示界面中的控件。当控件水平排列时,显示顺序依次为从左到右,当控件垂直排列时,显示顺序依次为从上到下。
注意:子控件之间不能重叠,可以设置权重。

在这里插入图片描述

2. 线性布局常用属性

控件属性功能描述
android:orientation设置线性布局的朝向,可设置为horizontal、vertical两种排列方式
android:layout_weight子控件属性,设置元素所分配的权重,只有在Linearlayout中,该属性才有效
android:gravity子控件属性,设置自身内部元素的对齐方式
android:layout_gravity子控件属性,设置自身相当于父容器的对齐方式

在这里插入图片描述

常用属性:android: gravity

线性布局的控件默认是从左往右排列或从上往下排列,如果想让线性布局中的子控件排列对齐右边缘或者底部,可以用gravity属性控制。

在这里插入图片描述

常用属性:android: layout_gravity

gravity属性表示当前布局/控件内部的子控件位置,layout_gravity表示当前控件在父控件的位置。当父控件设置了gravity且子控件也设置了layout_gravity时, 子控件的layout_gravity优先级高。

在这里插入图片描述

常用属性:android: layout_weight

LinearLayout中另外一个常用的属性是layout_weight,该属性需要加在LinearLayout的子控件中。其作用是分配线性布局中的剩余空间到该控件上(注意分割的是剩余空间而不是总空间)。在控件没有添加layout_weight属性时,控件未占满线性布局的区域会空出来。

在这里插入图片描述

常用属性:android: layout_weight

给控件Button_2加上android:layout_weight="1"后,会把线性布局剩余空间全部占满。

在这里插入图片描述

常用属性:android: layout_weight

如果都加上android:layout_weight=“1”,则多个控件均匀分配剩余空间。

在这里插入图片描述

常用属性:android: layout_weight

如果填入不同的数字,则按对应数字比例瓜分剩余空间。

在这里插入图片描述

常用属性:android: layout_weight

问题:如何使用 layout_weight 实现全部空间按比例分配?

在这里插入图片描述

官方文档: https://developer.android.google.cn/reference/android/widget/LinearLayout?hl=en

3. 线性布局案例

案例描述:使用LinearLayout完成一个“注册个人信息”的布局,如下图所示,左图为显示效果,右图为设计布局的组件树。
在这里插入图片描述

activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<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:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical"
    tools:context=".MainActivity">

    <TextView
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#6200ef"
        android:gravity="center_vertical"
        android:paddingLeft="18dp"
        android:text="Section_3"
        android:textColor="#ffffff"
        android:textSize="18dp" />

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="10dp"
        android:text="LinearLayout注册表"
        android:textSize="26dp"
        android:textStyle="bold" />

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginTop="10dp">

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="姓名:"
            android:textSize="20dp" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="学号:"
            android:textSize="20dp" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="wrap_content"

        >

        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="学院:"
            android:textSize="20dp" />

        <EditText
            android:layout_width="match_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>

    <LinearLayout
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:layout_marginTop="30dp">

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="提交" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="重置" />

        <Button
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="取消" />

    </LinearLayout>


</LinearLayout>

在这里插入图片描述
字体水平居中
android:gravity=“center_vertical”

textviw居中
android:layout_gravity=“center”

3.5 约束布局

1. 约束布局

约束布局(ConstraintLayout)是解决布局嵌套过多的问题,以灵活的方式定位和调整小部件。
ConstraintLayout是Android Studio 2.2新添加的布局。
ConstraintLayout布局中的控件可以在横向和纵向上以添加约束关系的方式进行相对定位,其中,横向边包括Left、Start、Right、End,纵向边包括Top、Bottom、Baseline(文本底部的基准线)。

在这里插入图片描述

2. 约束布局相对定位关系属性

属性名称功能描述
layout_constraintLeft_toLeftOf控件的左边与另外一个控件的左边对齐
layout_constraintLeft_toRightOf控件的左边与另外一个控件的右边对齐
layout_constraintRight_toLeftOf控件的右边与另外一个控件的左边对齐
layout_constraintRight_toRightOf控件的右边与另外一个控件的右边对齐
layout_constraintTop_toTopOf控件的上边与另外一个控件的上边对齐
layout_constraintTop_toBottomOf控件的上边与另外一个控件的底部对齐
layout_constraintBottom_toTopOf控件的底边与另外一个控件的上边对齐
layout_constraintBottom_toBottomOf控件的底边与另外一个控件的底部对齐
layout_constraintStart_toEndOf控件的起始边与另外一个控件的尾部对齐
layout_constraintStart_toStartOf控件的起始边与另外一个控件的起始边对齐
layout_constraintEnd_toStartOf控件的尾部与另外一个控件的起始边对齐
layout_constraintEnd_toEndOf控件的尾部与另外一个控件的尾部对齐
layout_constraintBaseline_toBaselineOf控件间的文本内容基准线对齐

3. 控件居中定位与偏向

当相同方向上(横向或纵向),控件两边同时向ConstraintLayout添加约束,则控件在添加约束的方向上居中显示。

在这里插入图片描述

如果ConstraintLayout布局中的控件在居中方向(横向或者纵向)上和父布局(ConstraintLayout)的尺寸一致,此时该方向的居中约束和倾向没有意义。

在这里插入图片描述

遇到相反的约束时,默认的做法是将控件居中;但可以通过使用偏向属性来调整位置。

属性名称功能描述
layout_constraintHorizontal_bias横向的倾向,取值0-1
layout_constraintVertical_bias纵向的倾向,取值0-1

在这里插入图片描述

4. Chain——定义

Chain(链),在同一个轴上(水平或者垂直)提供一个类似群组的统一表现,是一种特殊的约束,它使我们能够对一组水平或竖直方向互相关联的控件进行统一管理。一组控件通过一个双向的约束关系链接起来,就能形成一个Chain。

在这里插入图片描述

5. Chain heads——链头

链由在链的第一个元素(链的“head”)上设置的属性控制,head是水平链的最左侧控件,垂直链的最顶部控件。

在这里插入图片描述
在这里插入图片描述

6. Chain Style——链样式

当在链的第一个元素上设置属性layout_constraintHorizontal_chainStyle或layout_constraintVertical_chainStyle时,链的行为将根据指定的样式改变(默认为CHAIN_SPREAD)。

在这里插入图片描述

7. Weighted chains——权重链

Chains(链)还支持weight(权重)的配置,使用layout_constraintHorizontal_weight和layout_constraintVertical_weight进行设置链元素的权重。

在这里插入图片描述

9. 约束布局案例

案例要求:使用ConstraintLayout完成一个布局,如下图所示,左图为显示效果,右图为设计布局的组件树。
在这里插入图片描述

activity_main.xml
<?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"
    tools:context=".MainActivity">

    <TextView
        android:id="@+id/textView"
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:background="#6200ef"
        android:gravity="center_vertical"
        android:paddingLeft="18dp"
        android:text="Section_3"
        android:textColor="#ffffff"
        android:textSize="18dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <TextView
        android:id="@+id/textView2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="20dp"
        android:text="ConstraintLayout注册表"
        android:textSize="30dp"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView" />

    <TextView
        android:id="@+id/textView3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="姓名:"
        android:textSize="20dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/textView2" />

    <EditText
        android:id="@+id/editText"
        android:layout_width="350dp"

        android:layout_height="wrap_content"
        app:layout_constraintStart_toEndOf="@+id/textView3"
        app:layout_constraintTop_toBottomOf="@+id/textView2" />

    <TextView
        android:id="@+id/textView4"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="学号:"
        android:textSize="20dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText" />

    <EditText
        android:id="@+id/editText2"
        android:layout_width="350dp"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toEndOf="@+id/textView4"
        app:layout_constraintTop_toBottomOf="@+id/editText" />

    <TextView
        android:id="@+id/textView5"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="学院:"
        android:textSize="20dp"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/editText2" />

    <EditText
        android:id="@+id/editText3"
        android:layout_width="350dp"
        android:layout_height="wrap_content"
        app:layout_constraintStart_toEndOf="@+id/textView5"
        app:layout_constraintTop_toBottomOf="@+id/editText2" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="提交"
        app:layout_constraintEnd_toStartOf="@+id/button"
        app:layout_constraintTop_toBottomOf="@+id/editText3" />

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="重置"
        app:layout_constraintEnd_toStartOf="@+id/button3"
        app:layout_constraintTop_toBottomOf="@+id/editText3" />

    <Button
        android:id="@+id/button3"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="取消"
        app:layout_constraintEnd_toEndOf="parent"
        android:layout_marginRight="80dp"
        app:layout_constraintTop_toBottomOf="@+id/editText3" />



</androidx.constraintlayout.widget.ConstraintLayout>


在这里插入图片描述

讨论题

1.线性布局如何控制布局中控件的摆放方向?

通过设置其属性android: orientation的值(horizontal或vertical)来控制其控件方向。

2.线性布局需要注意的问题有哪些?

当线性布局中的控件使用权重属性时,其宽度或高度属性值通常设置为0dp,宽度或高度的权重属性对生效。

3.什么是约束布局?

约束布局是解决布局嵌套过多的问题,以灵活的方式定位和调整小部件。

复习提问

1.线性布局如何控制布局中控件的摆放方向?

●在线性布局中,可以使用android:orientation属性来控制控件的摆放方向。该属性有两个可选值:horizontal(水平方向):控件按照水平方向从左到右依次排列。

●vertical(垂直方向):控件按照垂直方向从上到下依次排列。
通过设置android:orientation属性,您可以决定线性布局中控件的摆放方向。
例如,以下代码片段演示了一个水平线性布局,其中两个按钮按照水平方向排列:

<LinearLayout
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button 1" />

    <Button
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="Button 2" />

</LinearLayout>

2.哪种布局可以使用chain?

约束布局。

作业

CSDN

一,项目实验——Android 线性布局

http://t.csdnimg.cn/IsGm3

二,项目实验——Android 约束布局

http://t.csdnimg.cn/HLO4j

  • 45
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值