《黑马程序员Android移动应用基础教程》学习笔记(2)

本文详细介绍了Android中的五种常见布局,包括View视图、XML布局编写、Java代码布局、相对布局(RelativeLayout)、线性布局(LinearLayout)、表格布局(TableLayout)、帧布局(FrameLayout)和约束布局(ConstraintLayout)。学习如何设置通用属性、定位控件及屏幕适配技巧。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ch 2 Android常见界面布局

2.1 View视图

在这里插入图片描述
ViewGroup 和 View 控件的包含关系

Android应用的每个界面的根元素必须有且只有一个ViewGroup容器。

2.2 界面布局编写方式

2.2.1 在XML文件中编写布局

Android可以使用XML布局文件控制界面布局,从而有效地将界面中布局的代码和Java代码分离,使程序的结构更加清晰

2.2.2 在Java代码中编写布局

在Android中所有布局和空间的对象都可以通过new关键字创建出来,将创建的View控件添加到ViewGroup布局中,从而实现View控件在布局界面中显示。

不管使用哪种方式编写布局,它们控制Android用户界面行为的本质是完全一样的。

2.3 常见界面布局

五种常见布局
RelativeLayout 相对布局
LinearLayout 线性布局
FrameLayout 帧布局
TableLayout 表格布局
ConstraintLayout 约束布局

2.3.1 布局的通用属性

Android系统提供的五种常用布局直接或间接继承自ViewGroup,因此也常用布局支持在ViewGroup中定义的属性。

  1. android:id
    用于设置当前布局的唯一标识。通过"@+id/属性名称"定义。
    R.java文件中会自动生成对应的int值。在Java代码中通过为findViewById()方法传入该int值来获取该布局对象。
  2. android:layout_width
    用于设置布局宽度
    1. fill_parent: 该布局宽度与父容器宽度相同。
    2. match_parent:与fill_parent相同,Android2.2开始推荐使用。match_parent
    3. wrap_content:该布局宽度恰好能包裹内容。
  3. android:layout_heigh
    用于设置布局高度
    1. fill_parent: 该布局宽度与父容器高度相同。
    2. match_parent:与fill_parent相同,Android2.2开始推荐使用。match_parent
    3. wrap_content:该布局高度恰好能包裹内容。
  4. android:background
    用于设置布局背景。
  5. android:layout_margin
    用于设置当前布局与屏幕边界、周围布局或控件的距离。
    • android:layout_marginTop
    • android:layout_marginBottom
    • android:layout_marginLeft
    • android:layout_marginRight
  6. android:layout_padding
    用于设置当前布局内控件与该布局的距离。
    • android:layout_paddingTop
    • android:layout_paddingBottom
    • android:layout_paddingLeft
    • android:layout_paddingRight

Android系统提供的五种常用布局必须设置android:layout_widthandroid:layout_height

2.3.2 RelativeLayout相对布局

RelativeLayout通过相对定位的方式指定子控件的位置。
定义格式:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
   属性 = "属性值"
   ......>
</RelativeLayout>

Relativelayout中子控件属性

属性名称功能描述
android:layout_centerInParent设置当前控件位于父布局的中央位置
android:layout_centerVertical设置当前控件位于父布局的垂直居中位置
android:layout_centerHorizontal设置当前控件位于父布局的水平居中位置
android:layout_above设置当前控件位于某控件上方
android:layout_below设置当前控件位于某控件下方
android:layout_toLeftOf设置当前控件位于某控件左侧
android:layout_toRightOf设置当前控件位于某控件右侧
android:layout_alignParentTop设置当前控件是否与父控件顶端对齐
android:layout_alignParentLeft设置当前控件是否与父控件左端对齐
android:layout_alignParentRight设置当前控件是否与父控件右端对齐
android:layout_alignParentBottom设置当前控件是否与父控件底端对齐
android:layout_alignTop设置当前控件的上边界与某控件的上边界对齐
android:layout_alignBottom设置当前控件的下边界与某控件的下边界对齐
android:layout_alignLeft设置当前控件的左边界与某控件的左边界对齐
android:layout_alignRight设置当前控件的右边界与某控件的右边界对齐

Relativelayout布局中定义的控件默认与父布局左上角对齐。

布局和控件的宽高

为了让Android程序拥有更好的屏幕适配能力,在设置控件和布局宽高时最好使用match_parentwrap_content

2.3.3 LinearLayout线性布局

LinearLayout通常指定布局内的子空间水平或竖直排列。
定义格式:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
   属性 = "属性值"
   ......>
</LinearLayout>
  1. 属性说明
    1. android:orientation
      用于设置LinearLayout布局中控件的排列顺序,可选verticalhorizontal
    2. android:weight
      通过设置权重使布局内的控件按照权重比显示大小,在进行屏幕适配时起关键作用。
  2. 为控件分配权重

LinearLayout布局中的android:layout_width不可设为warp_content,因为LinearLayout优先级比Botton高,如果设置warp_content,则Button控件的android:layout_weight会失去作用。设置了Button控件的android:layout_weight属性时,控件的android:layout_width一般设置为0dp才会有权重占比效果。

2.3.4 TableLayout表格布局

TableLayout采用行、列的形式来管理控件。通过在TableLayout布局中添加TableRow布局或控件来控制表格行数,在TableRow布局中添加控件来控制表格列数
XML布局文件中定义表格布局基本语法格式:

<TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
   属性 = "属性值">
   <TableRow>
      UI控件
   </TableRow>
   UI控件
   ......
</TableLayout>

TableLayout继承自LinearLayout,因此完全支持LinearLayout所支持的属性
TableLayout布局常用属性

属性名称功能描述例子
android:stretchColumns设置可被拉伸的列="0"表示第1列可被拉伸
android:shrinkColumns设置可被收缩的列="1,2"表示2,3列可被收缩
android:collapseColumns设置可被隐藏的列="0"表示第1列可被隐藏
TableLayout布局中控件常用属性
属性名称功能描述例子
--------------------------------------------------------------------------
android:layout_column设置该控件显示的位置="1"表示在第二个位置显示
android:layout_span设置该控件占据几行,默认为1行
###2.3.5 FrameLayout帧布局
FrameLayout用于在屏幕上创建一块空白区域,添加到该区域中的每个子控件占一帧。后加入的控件会叠加在上一个控件上层。默认情况下,帧布局中的所有控件会与左上角对齐。
XML布局文件中定义FrameLayout基本语法格式:
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
   属性 = "属性值">
</FrameLayout>

FrameLayout属性

属性名称功能描述
android:foreground设置帧布局容器的前景图像(始终在所有子控件之上)
android:foregroundGravity设置前景图像显示的位置

2.3.6 ConstraintLayout约束布局

ConstraintLayout是Android Studio2.2新添加的布局。ConstrainLayout并不太适合使用XML代码的方式编写布局,但非常适合使用可视化的方式编写界面布局

  1. 相对定位
    一个空间相对于另一个空间进行定位ConstrainLayout布局中的控件可以在横向和纵向上以添加约束关系的方式进行相对定位。

    • 横向:left、start、right、end
    • 纵向:top、bottom、baseline(文本底部基准线)

    相对定位关系的属性

    属性名称功能描述
    layout_constraintLeft_toLeftOf控件左边与另一个控件的左边对齐
    layout_constraintLeft_toRightOf控件左边与另一个控件的右边对齐
    layout_constraintRight_toLeftOf控件右边与另一个控件的左边对齐
    layout_constraintRight_toRightOf控件右边与另一个控件的右边对齐
    layout_constraintTop_toTopOf控件上边与另一个控件的上边对齐
    layout_constraintTop_toBottomOf控件上边与另一个控件的底部对齐
    layout_constraintBaseline_toBaselineOf控件间的文本内容基准线对齐
    layout_constraintStart_toEndOf控件的起始边与另外一个控件的尾部对齐
    layout_constraintStart_toStartOf控件的起始边与另外一个控件的起始边对齐
    layout_constraintEnd_toStartOf控件的尾部与另外一个控件的起始边对齐
    layout_constraintEnd_toEndOf控件的尾部与另外一个控件的尾部对齐
  2. 居中定位和倾向
    控件可以通过添加约束的方式确定该控件在父布局中的相对位置。当相同方向上,控件两边同时向ConstraintLayout添加约束,则控件在添加约束的方向上居中显示
    两个约束的力大小不等时,就会产生倾向
    倾向的属性

    属性名称功能描述
    layout_constraintHorizontal_bias横向的倾向
    layout_constraintVertical_bias纵向的倾向

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

  3. Chain
    Chain是一种特殊的约束。它使我们能够对一组水平或垂直方向上互相关联的控件进行统一管理。一组控件通过一个双向的约束关系链接起来,就能形成一个Chain
    Chain中第一个控件成为头控件,头控件可以通过layout_constraintHorizontal_chainStylelayout_constraintVertical_chainStyle属性设置水平链条和竖直链条的样式

    1. spread:设置控件在布局内均匀分布。
    2. spread_insid:设置两端的控件与父布局无间距显示,其他的控件将在剩余的空间内采用spread样式进行布局
    3. packed:设置Chain中的所有控件合并在一起后在布局内居中显示。

    当控件设置为0dp时,Chain的3种样式可以配合layout_constraintHorizontalweight形成Weighted Chain的样式。
    packed可以搭配layoutconstraintHorizontal_bias控制Chain与父容器的间距从而形成packed Chain With Bias样式。

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值