Android布局——线性布局、相对布局、帧布局、表格布局、网格布局、约束布局

简介: Android布局——线性布局、相对布局、帧布局、表格布局、网格布局、约束布局

1.概述

1.1 布局的作用:布局是对界面结构的全面规划和安排,通过api中提供的各种布局能够快速的完成对界面的设计和规划

1.2 布局的种类:线性布局(LinearLayout)、相对布局(RelativeLayout)、帧布局(FrameLayout)、表格布局(TableLayout)、网格布局(GridLayout)、约束布局(ConstraintLayout)其中三种不常用布局帧布局、表格布局、网格布局

1.3 常用属性:layout_width 宽度、layout_height 高度、layout_padding 内边距、layout_margin 外边距,这个四个属性是所有布局共有的属性,取值有三种:match_parent匹配父容器、wrap_content适应内容、xxdp具体数值,比如200dp

2.线性布局

1.方向属性orientation:内容摆放的方向,有垂直(vertical)、水平(horizontal)两种

   <?xml version="1.0" encoding="utf-8"?>

   <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_margin="20dp"

       android:padding="20dp">

   

       <TextView

           android:layout_width="wrap_content"

           android:layout_height="wrap_content"

           android:background="#ff0000"

           android:text="登录按钮"/>

       <TextView

           android:layout_width="wrap_content"

           android:layout_height="wrap_content"

           android:background="#00ff00"

           android:text="退出按钮"/>

       <TextView

           android:layout_width="wrap_content"

           android:layout_height="wrap_content"

           android:background="#0000ff"

           android:text="注册按钮"/>

   </LinearLayout>

 

2.权重属性layout_weight

如果要出现下图的布局

这里只需要给第一个控件添加权重

渲染的时候先展示没有权重的,最后剩余的空间会被有权重的全部拥有

如果要合理的按比例分配,此时要设置layout_width="0dp"(如果垂直设置高度为0dp)

总共5份,以此占1/5 2/5 2/5,并且控件的内容是不会影响这个比列的

3.重力属性

让控件左,右,上,下,居中等进行偏移,但是如果水平上的布局比例已经确定,重力属性在水平不再起作用,

如下让中间的偏移到垂直居中

 

2.相对布局

相对布局是通过相对定位的方式让控件出现在布局任意位置;

在相对布局中如果不指定控件摆放的位置,那么控件都会被默认放在RelativeLayout的左上角。因此要先指定第一个控件的位置,再根据此控件去给其他控件布局。

RelativeLayout常见属性

相对于父容器layout_centerInParent(取值:true/false)

效果如下

其他常用属性如下:

   android:layout_centerHrizontal  水平居中

   android:layout_centerVertical 垂直居中

   android:layout_centerInparent    相对于父元素完全居中

   android:layout_alignParentBottom 位于父元素的下边缘

   android:layout_alignParentLeft   位于父元素的左边缘

   android:layout_alignParentRight  位于父元素的右边缘

   android:layout_alignParentTop    位于父元素的上边缘

   android:layout_alignWithParentIfMissing  如果对应的兄弟元素找不到的话就以父元素做参照物

相对于其他控件(取值:其他控件id)

其他属性:

android:layout_below      位于元素的下方

   android:layout_above      位于元素的的上方

   android:layout_toLeftOf   位于元素的左边

   android:layout_toRightOf  位于元素的右边

   android:layout_alignTop   该元素的上边缘和某元素的的上边缘对齐

   android:layout_alignLeft  该元素的左边缘和某元素的的左边缘对齐

   android:layout_alignBottom 该元素的下边缘和某元素的的下边缘对齐

   android:layout_alignRight  该元素的右边缘和某元素的的右边缘对齐

3.帧布局

如上图类似这种布局就是帧布局,后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和全部遮挡

常用属性

android:layout_gravity="center"//控件重力

android:gravity="center"//控件内容相对于控件本身的位置

android:foreground="@mipmap/bg"//前景

android:foregroundGravity="center_vetical"//前景重力

案例代码

<TextView

   android:layout_width="350dp"

   android:layout_height="350dp"

   android:background="#ff0000"

   android:layout_gravity="center"/>

<TextView

   android:layout_width="200dp"

   android:layout_height="200dp"

   android:background="#00ff00"

   android:layout_gravity="center"

  />

<TextView

   android:layout_width="100dp"

   android:layout_height="100dp"

   android:background="#0000ff"

   android:layout_gravity="center"

   android:text="测试内容"

   android:textColor="#ffffff"

   android:gravity="center"

   />

效果

4.表格布局

通过行列的形式展示我们的控件,这样的布局就是表格布局

常见属性

android:stretchColumns="*"//设置可伸展的列,传入的是整型数据,即列的索引,*代表所有,也可多个比如1,2

android:shrinkColumns="1"//可伸缩的列

android:collapseColumns="2,3"//隐藏的列

案例代码

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

   android:layout_width="match_parent"

   android:layout_height="match_parent"

   android:stretchColumns="*"

   >

   <!--

   1.直接在Tablelayout中添加控件,默认控件和父容器等宽,要让一些控件出现在同一行,把这些控件放在TableRow

   里面,宽度默认是内容宽度

   -->

   <EditText/>

   <TableRow>

       <Button android:text="7" />

       <Button android:text="8" />

       <Button android:text="9" />

       <Button android:text="/" />

   </TableRow>

   <TableRow>

       <Button android:text="4" />

       <Button android:text="5" />

       <Button android:text="6" />

       <Button android:text="-" />

   </TableRow>

   <TableRow>

       <Button android:text="1" />

       <Button android:text="2" />

       <Button android:text="3" />

       <Button android:text="+" />

   </TableRow>

   <TableRow>

       <Button android:text="." />

       <Button android:text="0" />

       <Button android:text="=" />

       <Button android:text="*" />

   </TableRow>

   

</TableLayout>

5.网格布局

如上图,网格布局和表格布局类似,但是网格能自身确定整个布局应该出现多少行多少列。控件放入的时候从左到右摆满指定的列数,再从第二行开始摆放

常用属性

android:orientation="horizontal"//表示控件在网格中从左到右顺序摆放还是上到下的顺序摆放

android:rowCount="4"//行数

android:columnCount="3"//列数

android:layout_rowSpan="2"//跨2行

android:layout_columnSpan="2"//跨2列

android:layout_gravity="fill"//填充展示

案例

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

   android:layout_width="match_parent"

   android:layout_height="match_parent"

   android:orientation="horizontal"

   android:rowCount="4"

   android:columnCount="3"

   >

   <Button android:text="1"/>

   <Button android:text="2"/>

   <Button android:text="3"/>

   <Button android:text="4"

       android:layout_rowSpan="2"

       android:layout_columnSpan="2"

       android:layout_gravity="fill"/>

   <Button android:text="5"/>

   <Button android:text="6"/>

   <Button android:text="7"/>

   <Button android:text="8"/>

   <Button android:text="9"/>

</GridLayout>

6.约束布局

约束布局特点

1.前面介绍的布局,虽然在AS中可以拖拽控件实现,但写代码更加方便,但是约束布局更加倾向通过拖拽设计可视化

2.能够有效解决布局过多问题,让页面更加扁平化

(由于是通过动手拖拽实现,所以需要多次尝试才能熟练掌握)

常用属性

app:layout_constraintBottom_toBottomOf="@+id/m"//当前控件的下边线约束到到指定控件或者父容器下边线

在AS中拖拽实现约束布局界面(尝试多用几次掌握)

文章首发地址:www.javayihao.top

更多内容公众号:java一号


相关文章
|
23小时前
|
Android开发 Kotlin
kotlin开发安卓app,如何让布局自适应系统传统导航和全面屏导航
使用`navigationBarsPadding()`修饰符实现界面自适应,自动处理底部导航栏的内边距,再加上`.padding(bottom = 10.dp)`设定内容与屏幕底部的距离,以完成全面的布局适配。示例代码采用Kotlin。
30 15
|
12天前
Android-自定义流布局标签
Android-自定义流布局标签
10 0
|
12天前
|
Android开发 索引
Android流布局实现筛选界面
Android流布局实现筛选界面
13 0
|
4天前
|
开发工具 Android开发 iOS开发
探索Android与iOS开发的差异与挑战
【7月更文挑战第11天】在移动应用开发的广阔天地中,Android和iOS两大平台如同双子星座般耀眼,各自拥有独特的开发生态和用户群体。本文将深入分析这两个平台的显著差异,从技术架构到开发工具,再到市场定位,揭示它们之间的异同。通过比较,我们不仅能够更好地理解各自的优势和局限,还能洞察未来移动应用开发的趋势。
|
7天前
|
Java Android开发 iOS开发
探索Android与iOS开发的差异:平台选择对项目成功的影响
【7月更文挑战第8天】在移动应用开发的广阔天地中,Android与iOS两大平台各自占据着半壁江山。本文将深入探讨这两个平台在开发环境、用户界面设计、性能优化以及市场覆盖等方面的根本差异,并分析这些差异如何影响项目的成功。通过比较和分析,旨在为开发者在选择平台时提供更全面的视角,帮助他们根据项目需求和目标市场做出更明智的决策。
|
2天前
|
存储 移动开发 Android开发
使用kotlin Jetpack Compose框架开发安卓app, webview中h5如何访问手机存储上传文件
在Kotlin和Jetpack Compose中,集成WebView以支持HTML5页面访问手机存储及上传音频文件涉及关键步骤:1) 添加`READ_EXTERNAL_STORAGE`和`WRITE_EXTERNAL_STORAGE`权限,考虑Android 11的分区存储;2) 配置WebView允许JavaScript和文件访问,启用`javaScriptEnabled`、`allowFileAccess`等设置;3) HTML5页面使用`<input type="file">`让用户选择文件,利用File API;
|
5天前
|
开发者 Kotlin Android开发
Kotlin协程在Android开发中的应用
【7月更文挑战第10天】Kotlin协程简化了Android异步编程,提供轻量级并发。挂起函数让异步代码看起来同步,不阻塞线程,便于管理。在项目中,添加Kotlin和协程依赖,如`kotlinx.coroutines-core`和`kotlinx-coroutines-android`。使用`CoroutineScope`和`launch`处理耗时任务,如网络请求,避免主线程阻塞。挂起函数和调度器控制执行上下文,适应不同任务需求。
|
7天前
|
移动开发 开发工具 Android开发
探索安卓与iOS开发的差异:平台特性与编程实践
【7月更文挑战第8天】在移动开发的广阔天地中,安卓和iOS这两大操作系统各自占据着半壁江山。它们在用户界面设计、系统架构及开发工具上展现出截然不同的特色。本文将深入探讨这两个平台在技术实现和开发生态上的关键差异,并分享一些实用的开发技巧,旨在为跨平台开发者提供有价值的见解和建议。
|
1天前
|
存储 API Android开发
kotlin开发安卓app,使用webivew 触发 onShowFileChooser, 但只能触发一次,第二次无法触发,是怎么回事。 如何解决
在Android WebView开发中,`onShowFileChooser`方法用于开启文件选择。当用户只能选择一次文件可能是因为未正确处理选择回调。解决此问题需确保:1) 实现`WebChromeClient`并覆写`onShowFileChooser`;2) 用户选择文件后调用`ValueCallback.onReceiveValue`传递URI;3) 传递结果后将`ValueCallback`设为`null`以允许再次选择。下面是一个Kotlin示例,展示如何处理文件选择和结果回调。别忘了在Android 6.0+动态请求存储权限,以及在Android 10+处理分区存储。