Android开发中RelativeLayout相对布局

简介: Android开发中RelativeLayout相对布局

RelativeLayout布局是Android界面布局中应用最广也最强大的一种布局,其不仅十分灵活,可以解决开发中各种界面布局需求,同时也很方便了解决了多屏幕尺寸的适配问题。在iOS开发中,Autolayout技术总是被赞不绝口,RelativeLayout布局就是Andriod系统中的Autolayout,其又被称为相对布局。


       所谓相对布局,是指其坐标的确定并不是开发者写死的,而是有系统自动计算出来的,那么系统如何计算每个视图控件的位置呢?开发者需要为其添加一些规则进行约束,这些规则大致包括2类:


第1类 与父视图之间位置关系的规则:


       此类规则包括在父视图中的居中、左对齐、右对齐、上对齐、下对齐等。


第2类 平级视图之间相对位置关系的规则:


       此类规则包括同级视图间对其关系,相对位置关系,例如A在B左侧20像素位置,B与C上边缘对齐等。


使用RelativeLayout进行布局示例代码如下:


   @Override

   protected void onCreate(Bundle savedInstanceState) {

       super.onCreate(savedInstanceState);

       RelativeLayout relativeLayout = new RelativeLayout(this);

       Button button1 = new Button(this);

       button1.setText("按钮一");

       button1.setId(R.id.button1);

       RelativeLayout.LayoutParams layoutParams1 = new RelativeLayout.LayoutParams(200,200);

       //添加约束 使其靠近父视图右上角

       layoutParams1.addRule(RelativeLayout.ALIGN_PARENT_TOP);

       layoutParams1.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);

       button1.setLayoutParams(layoutParams1);


       Button button2 = new Button(this);

       button2.setText("按钮二");

       button2.setId(R.id.button2);

       RelativeLayout.LayoutParams layoutParams2 = new RelativeLayout.LayoutParams(200,200);

       //添加约束 让其右侧靠近按钮一左侧 上侧靠近按钮一下侧

       layoutParams2.addRule(RelativeLayout.BELOW,R.id.button1);

       layoutParams2.addRule(RelativeLayout.LEFT_OF,R.id.button1);

       button2.setLayoutParams(layoutParams2);


       Button button3 = new Button(this);

       button3.setText("按钮三");

       button3.setId(R.id.button3);

       RelativeLayout.LayoutParams layoutParams3 = new RelativeLayout.LayoutParams(200,200);

       //添加约束 让其固定距离按钮二 下方100px 左侧边缘对其

       layoutParams3.addRule(RelativeLayout.ALIGN_LEFT,R.id.button2);

       layoutParams3.addRule(RelativeLayout.BELOW,R.id.button2);

       layoutParams3.topMargin = 100;

       button3.setLayoutParams(layoutParams3);


       relativeLayout.addView(button1);

       relativeLayout.addView(button2);

       relativeLayout.addView(button3);

       setContentView(relativeLayout);

   }

小提示:使用代码创建的视图,可以通过xml文件配置id,如下:


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

<resources>

   <item name="button1" type="id"></item>

   <item name="button2" type="id"></item>

   <item name="button3" type="id"></item>

</resources>

效果如下图:

image.png



RelativeLayout布局中视图位置的配置主要使用其内部类LayoutParams,这个内部类LayoutParams是继承自MarginLayoutParams。其中常用方法和属性列举如下:


//设置左边距

public int leftMargin;

//设置上边距

public int topMargin;

//设置右边距

public int rightMargin;

//设置下边距

public int bottomMargin;


//添加一个规则 这个方法添加的规则不需要参照视图 例如靠近父视图边缘

public void addRule(int verb)

//添加一个规则 这个方法添加的规则需要一个参照视图 例如某两个平级视图间的位置关系 anchor参数为视图id

public void addRule(int verb, int anchor)

//移除一个布局规则

public void removeRule(int verb)

用于进行布局规则配置的参数如下:


/*=======需要使用addRule(int verb, int anchor)方法添加的约束规则==========*/

//将当前视图约束到某个视图左边

public static final int LEFT_OF

//将当前视图约束到某个视图右边

public static final int RIGHT_OF

//将当前视图约束到某个视图上边

public static final int ABOVE

//将当前视图约束到某个视图下边

public static final int BELOW

//将当前视图约束与某个视图基线对齐

public static final int ALIGN_BASELINE

//将当前视图约束与某个视图左侧对齐

public static final int ALIGN_LEFT

//将当前视图约束与某个视图上侧对齐

public static final int ALIGN_TOP

//将当前视图约束与某个视图右侧对齐

public static final int ALIGN_RIGHT

//将当前视图约束与某个视图下侧对齐

public static final int ALIGN_BOTTOM

//将当前视图约束与某个视图起始对齐

public static final int START_OF

//当当前视图约束与某个视图末尾对齐

public static final int END_OF


/*========需要使用addRule(int verb)方法添加的约束规则====================*/

//约束当前视图与父视图左侧对齐

public static final int ALIGN_PARENT_LEFT

//约束当前视图与父视图上侧对齐

public static final int ALIGN_PARENT_TOP

//约束当前视图与父视图上侧对齐

public static final int ALIGN_PARENT_RIGHT

//约束当前视图与父视图下侧对齐

public static final int ALIGN_PARENT_BOTTOM

//约束当前视图与父视图居中对齐

public static final int CENTER_IN_PARENT

//约束当前视图与父视图水平居中

public static final int CENTER_HORIZONTAL

//约束当前视图与父视图垂直居中

public static final int CENTER_VERTICAL

//约束当前视图与父视图起始对齐

public static final int ALIGN_PARENT_START

//约束当前视图与父视图末尾对齐

public static final int ALIGN_PARENT_END

目录
相关文章
|
13天前
|
消息中间件 网络协议 Java
Android 开发中实现数据传递:广播和Handler
Android 开发中实现数据传递:广播和Handler
14 1
|
14天前
|
Linux 编译器 Android开发
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
在Linux环境下,本文指导如何交叉编译x265的so库以适应Android。首先,需安装cmake和下载android-ndk-r21e。接着,下载x265源码,修改crosscompile.cmake的编译器设置。配置x265源码,使用指定的NDK路径,并在配置界面修改相关选项。随后,修改编译规则,编译并安装x265,调整pc描述文件并更新PKG_CONFIG_PATH。最后,修改FFmpeg配置脚本启用x265支持,编译安装FFmpeg,将生成的so文件导入Android工程,调整gradle配置以确保顺利运行。
38 1
FFmpeg开发笔记(九)Linux交叉编译Android的x265库
|
16天前
|
Unix Linux Shell
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
在Linux环境下交叉编译Android所需的FFmpeg so库,首先下载`android-ndk-r21e`,然后解压。接着,上传FFmpeg及相关库(如x264、freetype、lame)源码,修改相关sh文件,将`SYSTEM=windows-x86_64`改为`SYSTEM=linux-x86_64`并删除回车符。对x264的configure文件进行修改,然后编译x264。同样编译其他第三方库。设置环境变量`PKG_CONFIG_PATH`,最后在FFmpeg源码目录执行配置、编译和安装命令,生成的so文件复制到App工程指定目录。
43 9
FFmpeg开发笔记(八)Linux交叉编译Android的FFmpeg库
|
3天前
|
存储 安全 Android开发
安卓应用开发:构建一个高效的用户登录系统
【5月更文挑战第3天】在移动应用开发中,用户登录系统的设计与实现是至关重要的一环。对于安卓平台而言,一个高效、安全且用户体验友好的登录系统能够显著提升应用的用户留存率和市场竞争力。本文将探讨在安卓平台上实现用户登录系统的最佳实践,包括对最新身份验证技术的应用、安全性考量以及性能优化策略。
|
5天前
|
前端开发 Android开发 iOS开发
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
【4月更文挑战第30天】Flutter 框架实现跨平台移动应用,通过一致的 UI 渲染(Skia 引擎)、热重载功能和响应式框架提高开发效率和用户体验。然而,Android 和 iOS 的系统差异、渲染机制及编译过程影响性能。性能对比显示,iOS 可能因硬件优化提供更流畅体验,而 Android 更具灵活性和广泛硬件支持。开发者可采用代码、资源优化和特定平台优化策略,利用性能分析工具提升应用性能。
【Flutter前端技术开发专栏】Flutter在Android与iOS上的性能对比
|
6天前
|
监控 Java Android开发
安卓应用开发:打造高效用户界面的五大策略
【4月更文挑战第29天】 在安卓应用开发的世界中,构建一个既美观又高效的用户界面(UI)对于吸引和保留用户至关重要。本文将深入探讨五种策略,这些策略可以帮助开发者优化安卓应用的UI性能。我们将从布局优化讲起,逐步过渡到绘制优化、内存管理、异步处理以及最终的用户交互细节调整。通过这些实践技巧,你将能够为用户提供流畅而直观的体验,确保你的应用在竞争激烈的市场中脱颖而出。
|
19小时前
|
安全 Linux Android开发
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
该文介绍了如何在Linux服务器上交叉编译Android的FFmpeg库以支持HTTPS视频播放。首先,从GitHub下载openssl源码,解压后通过编译脚本`build_openssl.sh`生成64位静态库。接着,更新环境变量加载openssl,并编辑FFmpeg配置脚本`config_ffmpeg_openssl.sh`启用openssl支持。然后,编译安装FFmpeg。最后,将编译好的库文件导入App工程的相应目录,修改视频链接为HTTPS,App即可播放HTTPS在线视频。
14 3
FFmpeg开发笔记(十六)Linux交叉编译Android的OpenSSL库
|
5天前
|
存储 Java Android开发
安卓应用开发中的内存优化策略
【4月更文挑战第30天】在移动开发领域,尤其是安卓平台上,内存管理是影响应用性能和用户体验的关键因素。由于安卓设备的硬件资源有限,不合理的内存使用会导致应用响应缓慢、消耗过多电量甚至崩溃。本文将探讨针对安卓平台的内存优化技巧,旨在帮助开发者提高应用的性能和稳定性,从而提升用户满意度。我们将详细讨论内存泄漏的预防、合理的内存分配策略以及高效的内存回收方法。
|
6天前
|
机器学习/深度学习 安全 数据处理
构建未来:基于Android的智能家居控制系统开发
【4月更文挑战第29天】 随着物联网技术的蓬勃发展,智能家居已成为现代技术革新的重要领域。本文将深入探讨基于Android平台的智能家居控制系统的设计和实现,旨在提供一种用户友好、高度集成且功能丰富的解决方案。通过利用Android设备的广泛普及和其强大的处理能力,结合最新的无线通讯技术和人工智能算法,我们旨在打造一个可靠、易用且具有高度可定制性的智能家居控制环境。文中不仅详细阐述了系统架构、关键技术选型以及界面设计,还对可能遇到的安全挑战进行了分析,并提出了相应的解决策略。
|
6天前
|
监控 Java Android开发
安卓应用开发中的内存优化策略
【4月更文挑战第29天】在面对安卓设备多样化的硬件配置时,合理管理应用内存成为提升用户体验的关键。本文深入探讨了安卓应用开发中常见的内存泄漏问题,并提出了一系列针对性的优化策略。通过分析内存分配机制、垃圾回收原理及内存监控工具的使用,揭示了高效内存管理的实践方法。文章旨在为开发者提供一套系统的内存优化解决方案,以实现更流畅、稳定的应用性能。