RelativeLayout相对布局在Android UI开发中也应用比较多,虽然它不及LinearLayout使用方便,但某些场景中使用RelativeLayout也是一种很不错的选择。在官网上介绍RelativeLayout是一个视图组,在相对位置显示子视图。RelativeLayout是用于设计用户界面的非常强大的实用程序,因为它可以消除嵌套视图组并保持布局层次结构平坦,从而提高性能。如果您发现自己使用了多个嵌套LinearLayout组,则可以将它们替换为单个RelativeLayout.

使用相对布局

RelativeLayout相对布局可以创建为根容器布局,也可以创建为子项容器。下列的代码我们创建一个RelativeLayout布局容器:

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

创建了一个RelativeLayout(相对布局),宽、高为match_parent(匹配父级宽高)。

根据父容器定位

RelativeLayout相对布局子项根据父容器定位,可以轻松确定子项位置。

  • 左对齐: android:layout_alighParentStart

  • 右对齐: android:layout_alighParentEnd

  • 顶端对齐: android:layout_alighParentTop

  • 底部对齐: android:layout_alighParentBottom

  • 水平居中: android:layout_centerHorizontal

  • 垂直居中: android:layout_centerVertical

  • 中央位置: android:layout_centerInParent

以上属性用于确定相对布局的子项位于相对布局的位置,每个属性的值都是一个布尔值,表示是否对齐。下面代码用到了上述属性,图片展示了上述属性的效果。

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><TextViewandroid:text="alignParentTop"android:textColor="@color/black"android:textSize="18sp"android:layout_alignParentTop="true"android:layout_centerHorizontal="true"android:layout_width="wrap_content"android:layout_height="wrap_content"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentBottom="true"android:layout_centerHorizontal="true"android:text="alignParentBottom"android:textColor="@color/black"android:textSize="18sp" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentStart="true"android:text="alignParentStart"android:layout_centerVertical="true"android:textColor="@color/black"android:textSize="18sp" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_alignParentEnd="true"android:text="alignParentEnd"android:layout_centerVertical="true"android:textColor="@color/black"android:textSize="18sp" /><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="true"android:text="centerInParent"android:textColor="@color/black"android:textSize="18sp" />
</RelativeLayout>

上面布局嵌套了五个TextView子项,其中一个位于父容器中央,其余四个通过设置分别位于父容器上下左右四边居中。

根据兄弟容器定位

子项除了可以根据父容器定位,还可以根据兄弟子项实现定位,需要指定参考子项的id。

  • 左边: android:layout_toStartOf

  • 右边: android:layout_toEndOf

  • 上方: android:layout_above

  • 下方: android:layout_below

  • 对齐上边界: android:layout_alignTop

  • 对齐下边界: android:layout_alignBottom

  • 对齐左边界: android:layout_alignStart

  • 对齐右边界: android:layout_alignEnd

下面代码实现一个梅花布局效果:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><ImageViewandroid:id="@+id/center"android:layout_width="50dp"android:layout_height="50dp"android:src="@mipmap/ic_launcher"android:layout_centerInParent="true"/><!--最中间--><ImageViewandroid:layout_width="50dp"android:layout_height="50dp"android:src="@mipmap/ic_launcher"android:layout_above="@+id/center"android:layout_centerHorizontal="true"/><!--上面中间--><ImageViewandroid:layout_width="50dp"android:layout_height="50dp"android:src="@mipmap/ic_launcher"android:layout_below="@+id/center"android:layout_centerHorizontal="true"/><!--下面中间--><ImageViewandroid:layout_width="50dp"android:layout_height="50dp"android:src="@mipmap/ic_launcher"android:layout_toStartOf="@+id/center"android:layout_centerVertical="true"/><!--左边中间--><ImageViewandroid:layout_width="50dp"android:layout_height="50dp"android:src="@mipmap/ic_launcher"android:layout_toEndOf="@+id/center"android:layout_centerVertical="true"/><!--右边中间-->
</RelativeLayout>

效果预览:

上面示例首先确定中间位置,再以中间为参考,确定四边的位置。如果需要每个子项之间有一定的间距,只需要给最中间的那位设置layout_margin即可。

<ImageViewandroid:id="@+id/center"android:layout_width="50dp"android:layout_height="50dp"android:layout_margin="10dp"android:src="@mipmap/ic_launcher"android:layout_centerInParent="true"/><!--最中间-->

上面还有四个属性未使用到,使用方法也是如出一辙,可以自行尝试一下。

组合定位实现一个拨号键盘

相对布局比较简单,基本就以上一些属性,下面利用相对布局属性实现一个拨号键盘,效果预览图:

代码部分:

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"android:layout_width="match_parent"android:layout_height="match_parent"><RelativeLayoutandroid:id="@+id/c3"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingHorizontal="36dp"android:paddingVertical="18dp"android:layout_above="@+id/c2"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="7"android:textSize="36sp"android:textColor="@color/black"android:textStyle="bold"android:layout_alignParentStart="true"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="8"android:textSize="36sp"android:textColor="@color/black"android:textStyle="bold"android:layout_centerHorizontal="true"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="9"android:textSize="36sp"android:textColor="@color/black"android:textStyle="bold"android:layout_alignParentEnd="true"/></RelativeLayout><RelativeLayoutandroid:id="@+id/c2"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingHorizontal="36dp"android:paddingVertical="18dp"android:layout_above="@+id/c1"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="4"android:textSize="36sp"android:textColor="@color/black"android:textStyle="bold"android:layout_alignParentStart="true"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="5"android:textSize="36sp"android:textColor="@color/black"android:textStyle="bold"android:layout_centerHorizontal="true"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="6"android:textSize="36sp"android:textColor="@color/black"android:textStyle="bold"android:layout_alignParentEnd="true"/></RelativeLayout><RelativeLayoutandroid:id="@+id/c1"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingHorizontal="36dp"android:paddingVertical="18dp"android:layout_above="@+id/c0"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="1"android:textSize="36sp"android:textColor="@color/black"android:textStyle="bold"android:layout_alignParentStart="true"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="2"android:textSize="36sp"android:textColor="@color/black"android:textStyle="bold"android:layout_centerHorizontal="true"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="3"android:textSize="36sp"android:textColor="@color/black"android:textStyle="bold"android:layout_alignParentEnd="true"/></RelativeLayout><RelativeLayoutandroid:id="@+id/c0"android:layout_width="match_parent"android:layout_height="wrap_content"android:paddingHorizontal="36dp"android:paddingVertical="18dp"android:layout_alignParentBottom="true"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="*"android:textSize="36sp"android:textColor="@color/black"android:textStyle="bold"android:layout_alignParentStart="true"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="0"android:textSize="36sp"android:textColor="@color/black"android:textStyle="bold"android:layout_centerHorizontal="true"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:text="#"android:textSize="36sp"android:textColor="@color/black"android:textStyle="bold"android:layout_alignParentEnd="true"/></RelativeLayout></RelativeLayout>

好吧,代码有点长,拨号键和删除键也没有,有兴趣的读者可以自行完善一下,当然实现的方法也不止一种。

作者:微语博客
链接:https://www.jianshu.com/p/a26a8906239a
来源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。

RelativeLayout相对布局详解相关推荐

  1. Android开发重点难点1:RelativeLayout(相对布局)详解

    前言 啦啦啦~博主又推出了一个新的系列啦~ 之前的Android开发系列主要以完成实验的过程为主,经常会综合许多知识来写,所以难免会有知识点的交杂,给人一种混乱的感觉. 所以博主推出"重点难 ...

  2. 【C++】C++对象模型:对象内存布局详解(C#实例)

    C++对象模型:对象内存布局详解 0.前言 C++对象的内存布局.虚表指针.虚基类指针解的探讨,参考. 1.何为C++对象模型? 引用<深度探索C++对象模型>这本书中的话: 有两个概念可 ...

  3. Linux进程地址空间与进程内存布局详解,内核空间与用户空间

    Linux进程地址空间与进程内存布局详解 程序段(Text):程序代码在内存中的映射,存放函数体的二进制代码. 初始化过的数据(Data):在程序运行初已经对变量进行初始化的数据. 未初始化过的数据( ...

  4. DevExpress控件GridControl中的布局详解 【转】

    DevExpress控件GridControl中的布局详解 [转] 2012-10-24 13:27:28|  分类: devexpress |  标签:devexpress  |举报|字号 订阅 h ...

  5. qt布局嵌套_QDockWidget嵌套布局详解-实现Visual Studio布局

    概述 许多工程软件,如Qt Creator,VS,matlab等,都是使用dock布局窗口,这样用户可以自定义界面,自由组合窗口. Qt的嵌套布局由QDockWidget完成,用Qt Creator拖 ...

  6. html中style布局放哪,CSS样式表与格式布局详解

    样式表 CSS(Cascading Style Sheets  层叠样式表),作用是美化HTML网页. 内联样式表: 例: 内联样式表 内嵌样式表:必须写在head标签里 例: p { 样式;} he ...

  7. (淘宝无限适配)移动手机端rem布局详解(转载非原创)

    https://www.cnblogs.com/well-nice/p/5509589.html (淘宝无限适配)手机端rem布局详解(转载非原创) 从网易与淘宝的font-size思考前端设计稿与工 ...

  8. flutter页面布局HTML,Flutter开发实战初级(2)页面布局详解

    初级根底系列 Flutter开发实战初级(1)ListView详解 Flutter开发实战初级(2)布局详解 项目实战系列 Flutter开发实战 高仿微信(1)主页 Flutter开发实战 高仿微信 ...

  9. grid layout网格布局详解

    grid layout网格布局详解 什么是grid layout grid的特点 grid css属性的基础知识 创建一个grid布局 创建一个网格 隐性网格与显性网格 尺寸单位fr repeat函数 ...

最新文章

  1. Nginx配置Basic Auth登录认证的实现方法
  2. Effective Objective-C 2.0 Tips 总结 Chapter 3 Chapter 4
  3. JavaScript 插件的书页翻转效果
  4. docker学习笔记一:基本安装和设置容器静态ip
  5. SEO学习笔记-PR值
  6. Photoshopnbsp;CS4基础视频教程:通道与…
  7. 2020年全球锂电池电芯产值将超过3400亿元
  8. 超好用的卸载软件 —— Geek
  9. 【教育教学资源】教育资讯、教学功能、当老师、或者补习班给学生的资料
  10. 2023AB斗篷玩法全攻略
  11. 计算机无法打开这个应用,win10照片应用打不开提示“无法打开这应用”如何解决...
  12. 产品经理考什么证书?考这个准没错
  13. 如何用excel求平均数?认准average()——搜索函数时千万别输mean,否则会得到geomean()
  14. GPU服务器中安装CUDA
  15. WOS(六)——导出数据格式及处理
  16. JAVA里List集合中的对象根据对象的某个属性值降序或者升序排序java8
  17. 极光推送SDK引起的内存泄露排查
  18. 用python浪漫告白_Python实现浪漫表白
  19. 无线耳机全国产化电子元件推荐方案
  20. sorted排序函数用法

热门文章

  1. AN1078知识点整理
  2. macbookpro的ctrl和command互换
  3. (转载)电路级静电防护设计技巧与ESD防护方法
  4. 【日题】数学是什么?是做题(bushi)
  5. zabbix安装报错解决
  6. idea代码格式化快捷键及使用注意事项
  7. 在Sublime中采用markdown语法并发送笔记到Evernote中
  8. 设计模式学习笔记(二)工厂模式、模板模式和策略模式的混合使用
  9. Java基础之访问权限(访问限定符)
  10. typescript常见数据结构与算法