Android布局

本文详细介绍了Android开发中常用的六大布局,包括LinearLayout、RelativeLayout、FrameLayout、TableLayout、AbsoluteLayout及GridLayout的特点、应用场景及使用示例。

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

Android的六大布局

LinearLayout(线性布局)、RelativeLayout(相对布局)、GridLayout(网格布局)、FrameLayout(帧布局)、TableLayout(表格布局)、AbsoluteLayout(绝对布局)。此外还有ConstraintLayout(约束布局)这种新型布局。

学习布局的基础概念图

(一)Android布局管理器的类图
这里写图片描述
上面这个类图只是说了六大基本布局的关系,其实ViewGroup还有其他一些布局管理器。
这里要理解一点就是布局也是布局管理器,因为布局里面还可以添加布局。
(二)Android布局的XML关系图
这里写图片描述
局管理器里面既可以添加多个布局管理器又可以添加多个控件,而控件里面不能在添加布局或控件了。

布局类型及其具体介绍

这里写图片描述
这里写图片描述

1、LinearLayout布局

  • 布局特点:放主要提供控件水平或者垂直排列的模型,每个子组件
    都是以垂直或水平的方式来线性排布.(默认是垂直)。
  • 应用场景:最常用的布局方式

  • 布局方式:android:orientation=”horizontal” (水平) android:orientation=”vertical” (垂直)

<?xml version="1.0" encoding="utf-8"?>
<LinearLayout 
    xmlns:android="http://schemas.android.com/apk/res/android"    
    android:layout_width="match_parent"    
    android:layout_height="match_parent"    
    android:orientation="vertical">    
<LinearLayout        
    android:layout_width="match_parent"        
    android:layout_height="250dp"        
    android:orientation="horizontal">        
    <TextView           
        android:layout_width="96dp"      
        android:layout_height="match_parent" 
        android:background="#b2dfdb" />           
</LinearLayout>    
<LinearLayout        
    android:layout_width="match_parent"            
    android:layout_height="match_parent"        
    android:orientation="vertical">        
    <TextView           
        android:layout_width="match_parent"            
        android:layout_height="68dp"            
        android:background="#b2dfdb" />          
</LinearLayout>
</LinearLayout>

结果截图:
这里写图片描述

2、RelativeLayout布局

  • 布局特点:为某一个组件为参照物,来定位下一个组件的位置的布局方式。
  • 应用场景:控件之间存在相应关系(适配神器,推荐使用)
  • 常用属性:
    1、相对于父控件,例如:android:layout_alignParentTop=“true”
    android:layout_alignParentTop 控件的顶部与父控件的顶部对齐;
    android:layout_alignParentBottom 控件的底部与父控件的底部对齐;
    android:layout_alignParentLeft 控件的左部与父控件的左部对齐;
    android:layout_alignParentRight 控件的右部与父控件的右部对齐;
    2、相对给定Id控件,例如:android:layout_above=“@id/**”
    android:layout_alignBaseline 控件的baseline与给定ID的baseline对齐;
    android:layout_below 在某元素的下方
    android:layout_above 在某元素的上方
    andorid:layout_toRightOf 在某元素的右方
    android:layout_toLeftOf 在某元素的左方
    android:layout_alignBottom 和某元素下方对齐
    android:layout_alignTop 和某元素上方对齐
    android:layout_alignRight 和某元素右方对齐
    android:layout_alignLeft 和某元素左方对齐
    3、居中,例如:android:layout_centerInParent=“true”
    android:layout_centerHorizontal 水平居中;
    android:layout_centerVertical 垂直居中;
    android:layout_centerInParent 父控件的中央;
    4、边距,例如:android:layout_margin=” xxdp”
    android:layout_marginLeft 离某元素左边缘的距离
    android:layout_marginRight 离某元素右边缘的距离
    android:layout_marginTop 离某元素上边缘的距离
    android:layout_marginBottom 离某元素下边缘的距离

使用示例:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
     >

    <TextView
        android:id="@+id/main_tv_title"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:background="#55ff0000"
        android:gravity="center"
        android:text="相对布局的使用" />

    <!--
         android:layout_alignParentBottom="true"位于父框架的底部
        android:layout_centerHorizontal="true"在父框架中水平居中
        android:layout_centerVertical="true"在父框架中垂直居中

        这两个要区分,一个是边界对齐,一个是位于哪个方位
         android:layout_below="@+id/main_tv_title"位于对应文件的下边
        android:layout_alignRight="@+id/main_tv_title"和对应文件右对齐    -->

    <TextView
        android:id="@+id/main_tv_title2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignLeft="@+id/main_tv_title"
        android:layout_below="@+id/main_tv_title"
        android:background="#5500ff00"
        android:text="二级标题" />

    <TextView
        android:id="@+id/main_tv_center"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:text="中间"
        android:textSize="22sp"
        android:layout_margin="30dp" />

    <TextView
        android:id="@+id/main_tv_up"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_above="@id/main_tv_center"
        android:layout_alignRight="@id/main_tv_center"
        android:text="上面"
        android:textSize="22sp" />

    <TextView
        android:id="@+id/main_tv_dowm"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignRight="@id/main_tv_center"
        android:layout_below="@id/main_tv_center"
        android:text="下面"
        android:textSize="22sp" />

    <TextView
        android:id="@+id/main_tv_left"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toLeftOf="@id/main_tv_center"
        android:text="左边"
        android:layout_alignTop="@id/main_tv_center"
        android:textSize="22sp" />

    <TextView
        android:id="@+id/main_tv_right"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_toRightOf="@id/main_tv_center"
        android:layout_alignTop="@id/main_tv_center"
        android:text="上面"
        android:textSize="22sp" />

</RelativeLayout>

结果截图:
这里写图片描述

3、FrameLayout

  • 布局特点:放入其中的所有元素都被放置在最左上的区域,而且无法为这些元素指定一个确切的位置,下一个子元素会重叠覆盖上一个子元素。
  • 应用场景:适合浏览单张图片。

使用示例:

<?xml version="1.0" encoding="utf-8"?>
<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >
    <TextView
        android:layout_width="300dp"
        android:layout_height="300dp"
        android:background="#f00"
        android:layout_gravity="center"
        />
    <TextView
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:background="#0f0"
        android:layout_gravity="center"
        />
    <TextView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:background="#00f"
        android:layout_gravity="center"
        />

    <TextView
        android:layout_width="50dp"
        android:layout_height="52dp"
        android:layout_gravity="center"
        android:background="#fff" />

    <TextView
        android:layout_width="20dp"
        android:layout_height="wrap_content"
        android:layout_gravity="center"
        android:background="#000" />

</FrameLayout>

结果截图:
这里写图片描述

4、TableLayout布局

  • 布局特点:类似Html里的Table.使用TableRow来布局,其中TableRow代表一行,TableRow的每一个视图组件代表一个单元格。
  • 应用场景:控件之间存在相应关系。
  • TableLayout常用属性:android:shrinkColumns:设置可收缩的列,内容过多就收缩显示到第二行
    android:stretchColumns:设置可伸展的列,将空白区域填充满整个列
    android:collapseColumns:设置要隐藏的列
    列的索引从0开始,shrinkColumns和stretchColumns可以同时设置。
  • 子控件常用属性:android:layout_column:第几列
    android:layout_span:占据列数

使用示例:

<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical" android:layout_width="match_parent"
    android:layout_height="match_parent">

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="50dp"
        android:gravity="center">
        <TextView
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:text="首页"/>
    </LinearLayout>

    <LinearLayout
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        android:layout_weight="1"
        android:gravity="center">

        <TableLayout
            android:layout_width="match_parent"
            android:layout_height="match_parent"
            android:stretchColumns="0,1,2"
            android:gravity="center">

           <TableRow>
               <TextView
                   android:layout_width="100dp"
                   android:layout_height="100dp"
                   android:layout_margin="5dp"
                   android:background="#e2a617"
                   android:text="文件管理"
                   android:gravity="center"/>

               <TextView
                   android:layout_width="100dp"
                   android:layout_height="100dp"
                   android:layout_margin="5dp"
                   android:background="#0d637f"
                   android:text="应用商店"
                   android:gravity="center"/>

               <TextView
                   android:layout_width="100dp"
                   android:layout_height="100dp"
                   android:layout_margin="5dp"
                   android:background="#aa2266"
                   android:text="文件管理"
                   android:gravity="center"/>
           </TableRow>

            <TableRow>
                <TextView
                    android:layout_width="100dp"
                    android:layout_height="100dp"
                    android:layout_margin="5dp"
                    android:background="#45e15f"
                    android:text="应用管理"
                    android:gravity="center"/>
                <TextView
                    android:layout_width="200dp"
                    android:layout_height="100dp"
                    android:layout_margin="5dp"
                    android:background="#3924a4"
                    android:text="应用中心"
                    android:gravity="center"
                    android:layout_span="2"/>
            </TableRow>

        </TableLayout>

    </LinearLayout>

    <TableLayout
        android:layout_width="match_parent"
        android:layout_height="55dp"
        android:background="#f5f5f5"
        android:stretchColumns="0,1,2,3"
        android:gravity="center_vertical">

        <TableRow>
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="首页" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="消息" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="发现" />
            <TextView
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:gravity="center"
                android:text="我" />
        </TableRow>

    </TableLayout>
</LinearLayout>

结果截图:
这里写图片描述

5、AbsoluteLayout布局

  • 布局特点:采用坐标轴的方式定位组件,左上角是(0,0)点,往右x轴递增,往下Y轴递增,组件定位属性为android:layout_x和 android:layout_y来确定坐标。
  • 应用场景:准确定位空间位置
  • 绝对布局中将所有的子元素通过设置android:layout_x 和 android:layout_y属性,将子元素的坐标位置固定下来,即坐标(android:layout_x, android:layout_y) ,layout_x用来表示横坐标,layout_y用来表示纵坐标。屏幕左上角为坐标(0,0),横向往右为正方,纵向往下为正方。实际应用中,这种布局用的比较少,因为Android终端一般机型比较多,各自的屏幕大小。分辨率等可能都不一样,如果用绝对布局,可能导致在有的终端上显示不全等。

使用示例:

<?xml version="1.0" encoding="utf-8"?>
<AbsoluteLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >

    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_x="20dp"
        android:layout_y="20dp"
        android:text="用户名:"

        />

    <EditText 
         android:layout_height="wrap_content"
        android:layout_width="200dp"
        android:layout_x="80dp"
        android:layout_y="7dp"
        />
    <TextView
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:layout_x="20dp"
        android:layout_y="80dp"
        android:text="密    码:"

        />

     <EditText 
         android:layout_height="wrap_content"
        android:layout_width="200dp"
        android:layout_x="80dp"
        android:layout_y="60dp"
        />


     <Button
          android:layout_height="50dp"
        android:layout_width="100dp"
        android:layout_x="90dp"
        android:layout_y="120dp"
         android:text="提交"
         />

</AbsoluteLayout>

结果截图:
这里写图片描述

6、RelativeLayout布局

  • 布局特点:为某一个组件为参照物,来定位下一个组件的位置的布局方式。
  • 应用场景:控件之间存在相应关系(适配神器,推荐使用)
  • 常用属性:
    • 排列对齐:
      ①设置组件的排列方式: android:orientation=”” vertical(竖直,默认)或者horizontal(水平)
      ②设置组件的对齐方式: android:layout_gravity=”” center,left,right,buttom
    • 设置布局为几行几列:
      ①设置有多少行: android:rowCount=”4” //设置网格布局有4行
      ②设置有多少列: android:columnCount=”4” //设置网格布局有4列
    • 设置某个组件位于几行几列
      注:都是从0开始算的哦!
      ①组件在第几行: android:layout_row = “1” //设置组件位于第二行
      ②组件在第几列: android:layout_column = “2” //设置该组件位于第三列
    • 设置某个组件横跨几行几列:
      ①横跨几行: android:layout_rowSpan = “2” //纵向横跨2行
      ②横跨几列: android:layout_columnSpan = “3” //横向横跨2列

使用示例:

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/GridLayout1"
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:columnCount="4"
    android:orientation="horizontal"
    android:rowCount="6" >
    <TextView
        android:layout_columnSpan="4"
        android:layout_marginLeft="5dp"
        android:layout_marginRight="5dp"
        android:text="0"
        android:textSize="50sp" />
    <Button
        android:layout_columnSpan="2"
        android:layout_gravity="fill"
        android:text="回退" />
    <Button
        android:layout_columnSpan="2"
        android:layout_gravity="fill"
        android:text="清空" />
    <Button android:text="+" />
    <Button android:text="1" />
    <Button android:text="2" />
    <Button android:text="3" />
    <Button android:text="-" />
    <Button android:text="4" />
    <Button android:text="5" />
    <Button android:text="6" />
    <Button android:text="*" />
    <Button android:text="7" />
    <Button android:text="8" />
    <Button android:text="9" />
    <Button android:text="/" />
    <Button
        android:layout_width="wrap_content"
        android:text="." />
    <Button android:text="0" />
    <Button android:text="=" />

</GridLayout>

结果截图:
这里写图片描述

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值