Android中关于相对布局RelativeLayout的技巧汇总

前言

首先大家可以思考下如何用RelativeLayout而且没有嵌套生成下面的布局,如果你会的话就不用看后面的了。

分析

这个布局的特点是按钮3底部对齐,按钮2在按钮3的上面,文本框水平充满剩余的区域,按钮1顶部对齐,列表框垂直充满剩余的区域。

下面我们会拆分为下面两个子问题:

水平充满剩余区域的问题

水平方向上有两个组件,一个组件宽度为wrap_content(或者固定宽度),另外一个组件的需要充满剩余的宽度,效果如下:

左侧一个文本框,右侧一个按钮

如果是嵌套一个LinearLayout布局肯定就十分简单了,如果用RelativeLayout也是可以的,如下:

<Button
 android:id="@+id/btn2"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_above="@id/btn3"
 android:layout_alignParentRight="true"
 android:text="按钮2"
 />
<EditText
 android:id="@+id/et"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content"
 android:layout_alignBaseline="@id/btn2"
 android:layout_alignParentLeft="true"
 android:layout_toLeftOf="@id/btn2"
 />

主要方法如下:(主要通过toRightOf和toLeftOf两个属性)

1. 两个组件的布局宽度都是wrap_content(或者固定宽度)

2. 左边的组件alignParentLeft,右边的组件alignParentRight(如果他们左右分别有一些固定宽度的组件,就用toRightOf(左侧)或者toLeftOf(右侧)指定的组件)

3. 为了让左边的组件紧挨着右边的组件,也就是拉长左侧的文本框,设置toLeftOf="右边组件的ID" (这里是重点),这样,左侧文本框就会自动拉伸至和右侧按钮紧挨着。

4. 当然,最后,两边组件要水平对齐,对左边组件用alignBaseline="右边组件的ID"

5. 注意要把右侧按钮在代码中放到前面(否则编译时找不到对应的id,因为左侧EditText布局依赖右侧按钮)

垂直充满剩余空间的问题

垂直方向上有两个组件,第一个组件的高度为wrap_content(或固定高度),另外一个组件的高度需要充满剩余的高度,效果如前面的ListView:

这个时候也可以通过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"
    android:orientation="vertical">
 <Button
  android:id="@+id/btn1"
  android:layout_width="match_parent"
  android:layout_height="50dp"
  android:text="固定宽度按钮"/>
 <Button
  android:id="@+id/btn3"
  android:layout_width="match_parent"
  android:layout_height="wrap_content"
  android:layout_alignParentBottom="true"
  android:text="按钮3"/>
 <Button
  android:id="@+id/btn2"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_above="@id/btn3"
  android:layout_alignParentRight="true"
  android:text="按钮2"
  />
 <EditText
  android:id="@+id/et"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_alignBaseline="@id/btn2"
  android:layout_alignParentLeft="true"
  android:layout_toLeftOf="@id/btn2"
  />
 <ListView
  android:id="@+id/lv"
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:layout_above="@id/btn2"
  android:layout_below="@id/btn1"
  />
</RelativeLayout>

主要看ListView的布局,方法如下:

1. 让ListView below=上面的组件

2. 让ListView above=下面的组件

3. 注意将ListView依赖的组件都放到ListView的上面

看前面我们给出的完整的布局文件代码,这里需要说明如下内容:

注意组件在代码中的前后摆放,不然会编译报错(前面一直在说),方法如下:

需要拉伸的组件放到后面,然后用另一个组件来进行整体的布局。也就是被依赖位置的都放到前面,那些固定长宽(指的是固定或者wrap_content且不依赖其他组件布局的)或者依赖父容器的组件都放到前面,其他组件放到后面,如前面的按钮1,按钮3,按钮2都放到了前面,因为按钮2依赖于按钮3(按钮2 above 按钮3),所以按钮2也放到了按钮3的后面。 (按钮1说的是最上面那个固定高度按钮)

让两个组件水平中线对齐的问题

让一个组件和另外一个组件中线对齐:让其中一个组件足够高(或者我们知道哪个组件高度一定是高于顶一个组件的),然后让需要对齐的组件和这个没有内容的组件上下皆对齐(alignTop,alignBottom设置),然后将第二个组件的gravity为垂直居中即可。
如果是有 baseline 属性的 TextView,Button 这类显示文本的组件的话,可以通过 align_Baseline 来进行对齐,这里的 baseline指的是文本底部对其的,就像我们小时候拿一把尺子,然后比着尺子写字那种意思。

总结

以上就是这篇文章的全部内容了,希望本文的内容对各位Android开发者们能带来一定的帮助,如果有疑问大家可以留言交流,谢谢大家对我们的支持。

(0)

相关推荐

  • Android布局之RelativeLayout相对布局

    RelativeLayout是相对布局控件:以控件之间相对位置或相对父容器位置进行排列. 相对布局常用属性: 子类控件相对子类控件:值是另外一个控件的id android:layout_above----------位于给定DI控件之上 android:layout_below ----------位于给定DI控件之下  android:layout_toLeftOf -------位于给定控件左边 android:layout_toRightOf ------位于给定控件右边  android

  • Android RelativeLayout相对布局属性简析

    RelativeLayout用到的一些重要的属性: 第一类:属性值为true或false android:layout_centerHrizontal 水平居中 android:layout_centerVertical 垂直居中 android:layout_centerInparent 相对于父元素完全居中 android:layout_alignParentBottom 贴紧父元素的下边缘 android:layout_alignParentLeft 贴紧父元素的左边缘 android:l

  • Android手机开发 使用线性布局和相对布局实现Button垂直水平居中

    居中呢,这里分两种不同布局方式的居中!分别是 LinearLayout 和RelativeLayout. 一.首先说的是LinearLayout布局下的居中: 注意:android:layout_width="fill_parent" android:layout_height="fill_parent" 属性中,若水平居中,至少在宽度上占全屏:若垂直居中,则在高度上占全屏 <LinearLayout android:layout_width="fi

  • 浅析Android App的相对布局RelativeLayout

    一.什么是相对布局 相对布局是另外一种控件摆放的方式 相对布局是通过指定当前控件与兄弟控件或者父控件之间的相对位置,从而达到相对的位置 二.为什么要使用相对布局 相对于线性布局ui性能好 三.相对布局的两组常用属性 值为某个存在控件id: (1)android:layout_below放在某个存在id控件的下边缘(也就是当前控件的上边对齐到某个id控件的下边缘 (2)android:layout_above放在某个存在id控件的上边缘(也就是当前控件的下边缘对齐到某个id控件的上边缘 (3)an

  • Android编程之绝对布局AbsoluteLayout和相对布局RelativeLayout实例详解

    本文实例分析了Android编程之绝对布局AbsoluteLayout和相对布局RelativeLayout.分享给大家供大家参考,具体如下:  一.绝对布局AbsoluteLayout 绝对定位AbsoluteLayout,又可以叫做坐标布局,可以直接指定子元素的绝对位置,这种布局简单直接,直观性强,但是由于手机屏幕尺寸差别比较大,使用绝对定位的适应性会比较差. 下面我们举一个例子看看:例子里的机器人图片大小是250X250,可以看到我们使用android:layout_x和android:l

  • android Activity相对布局的使用方法

    相对布局要比前面讲的线性布局和表格布局要灵活一些,所以平常用得也是比较多的.相对布局控件的位置是与其周围控件的位置相关的,从名字可以看出来,这些位置都是相对的,确定出了其中一个控件的位置就可以确定另一个控件的位置了.本次实验就是显示如下的activity: 其中只有2个button,1个textview,1个edittext. 在相对布局中,一般用到的控件属性解释如下:在相对布局中有如下属性,解释如下:android:layout_above  为将该控件的底部放在指定id控件的上方androi

  • Android中关于相对布局RelativeLayout的技巧汇总

    前言 首先大家可以思考下如何用RelativeLayout而且没有嵌套生成下面的布局,如果你会的话就不用看后面的了. 分析 这个布局的特点是按钮3底部对齐,按钮2在按钮3的上面,文本框水平充满剩余的区域,按钮1顶部对齐,列表框垂直充满剩余的区域. 下面我们会拆分为下面两个子问题: 水平充满剩余区域的问题 水平方向上有两个组件,一个组件宽度为wrap_content(或者固定宽度),另外一个组件的需要充满剩余的宽度,效果如下: 左侧一个文本框,右侧一个按钮 如果是嵌套一个LinearLayout布

  • Android中ListView Item布局优化技巧

    本文实例讲述了Android中ListView Item布局优化技巧.分享给大家供大家参考,具体如下: 之前一直都不知道ListView有多种布局的优化方法,只能通过隐藏来实现,自己也知道效率肯定是很低的,但是也不知道有什么方法,这些天又查了一些资料,然后知道 其实google早就帮我们想好了优化方案了. 假设你的ListView Item有三种布局样式的可能:就比如很简单的显示一行字,要靠左,居中,靠右. 这时我们就可以在BaseAdapter里面重写两个方法: private static

  • Android中的LinearLayout布局

    LinearLayout : 线性布局 在一般情况下,当有很多控件需要在一个界面列出来时,我们就可以使用线性布局(LinearLayout)了,  线性布局是按照垂直方向(vertical)或水平方向(horizontal)的顺序依次排序子元素,每一个子元素都位于前一个元素之后,下面我们就简单的了解一下吧 在XML布局文件中会遇到如下一些单位 px:是屏幕的像素点   dp:一个基于density的抽象单位,屏幕的物理尺寸   sp:同dp相似,但会根据用户的字体大小进行缩放 XML代码如下:改

  • Android中ConstraintLayout约束布局的最全详细解析

    目录 一.ConstraintLayout概述 二.ConstraintLayout基础篇 2.1 基础操作 2.2 控件间添加约束 2.3 约束布局xml代码实现 三.ConstraintLayout 进阶篇 3.1 Chains链 3.2 尺寸约束 3.3 百分比布局 3.4 radio属性 3.5 圆形定位 四.ConstraintLayout 高级篇 4.1 Guideline 4.2 Group 4.3 Barrier 总结 一.ConstraintLayout概述 Constrain

  • Android中隐藏状态栏和标题栏的方法汇总(隐藏状态栏、标题栏的五种方法)

      方法一: public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // 隐藏标题栏 requestWindowFeature(Window.FEATURE_NO_TITLE); // 隐藏状态栏 getWindow().setFlags(WindowManager

  • Android中协调滚动布局的实现代码

    目录 使用 AppbarLayout 和 MotionLayout 实现常用的布局效果 一.AppbarLayout + ViewPager 二.AppbarLayout + RecyclerView 三.MotionLayout 总结 使用 AppbarLayout 和 MotionLayout 实现常用的布局效果 前文我们讲了协调滚动的一些定义方式,我们在开发中常用的几种效果都可用 AppbarLayout 或 MotionLayout 来实现. 这里先上效果图 可能大家都比较会Appbar

  • Android中FoldingLayout折叠布局的用法及实战全攻略

    一.概述 无意中翻到的FoldingLayout的介绍的博客,以及github地址.感觉很nice呀,于是花了点时间研究以及编写,本篇博客将带大家从最基本的原理分析,一步一步的实现我们的FoldingLayout,当然了,如果你能力过硬,可以直接下载github上的代码进行学习. 博客基本分为以下几个部分: 1.Matrix的setPolyToPoly使用 2.在图片上使用渐变和阴影 3.初步的FoldingLayout的实现,完成图片的折叠显示(可控制折叠次数.包含阴影的绘制) 4.引入手势,

  • Android中使用ListView绘制自定义表格技巧分享

    先上一下可以实现的效果图  要实现的效果有几方面 1.列不固定:可以根据数据源的不同生成不同的列数 2.表格内容可以根据数据源的定义合并列 3.要填写的单元格可以选择自定义键盘还是系统键盘 奔着这三点,做了个简单的实现,把源码贴一下(因为该点是主界面中的一部分,不便于放整个Demo) 自定义适配器,CallBackInterface是自定义的回调接口,这里定义回调是因为数据输入时需要及时保存 复制代码 代码如下: public class SiteDetailViewAdapter extend

  • Android中Glide库的使用小技巧总结

    简介 在泰国举行的谷歌开发者论坛上,谷歌为我们介绍了一个名叫 Glide 的图片加载库,作者是bumptech.这个库被广泛的运用在google的开源项目中,包括2014年google I/O大会上发布的官方app. https://github.com/bumptech/glide 简单使用  dependencies { compile 'com.github.bumptech.glide:glide:3.7.0' } 如何查看最新版本 http://search.maven.org/#se

随机推荐