Android UI之RealtiveLayout(相对布局)

说明:RealtiveLayout是目前android开发中最最常用的布局管理器(比LinearLayout还常用),布局内的子组件的位置总是相互依照其他子组件和RealtiveLayout布局本身来确定的。这样最大的好处就是更加自由灵活,可以设计出更加炫酷复杂的界面,而且可以在IDE中通过直接拖拽来进行界面的布局设计。

注意:RealtiveLayout的子组件不可以设置android:layout_gravity属性。

RealtiveLayout中需要关注的属性就比较多了,大概可以分为三类:

1 android:ignoreGravity

对应方法:setIgnoreGravity(int)

说明:设置不受gravity属性影响的子组件。跟其他布局一样,Realtivelayout也可以使用android:gravity属性来设置其子组件的摆放位置,但RealtiveLayout需要实现更加复杂的布局,所以为所有组件设置统一的摆放方式难以满足实际开发中的一些特殊需求,于是就有了这个属相来进行特殊的忽略。

举个栗子:

<RelativeLayout
    android:gravity="bottom"
    android:ignoreGravity="@id/view1"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ImageView
        android:id="@+id/view1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:scaleType="fitXY"
        android:src="@drawable/muogu" />
    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:scaleType="fitXY"
        android:src="@drawable/nailiu16" />
</RelativeLayout>

可以看到,由于RealtiveLayout中设置了gravity为bottom,所以第二个ImageView被摆放到了布局的底部,而ignoreGravity中设置了的view1就依然是我行我素地从左上角开始摆放。

2 只能设置为true、false的xml属性

说明:这一类属性主要是为了弥补RealtiveLayout子组件不能设置layout_gravity属性的遗憾,可以直接为子组件指定摆放位置。

以下是这类属性的属性表:

属性名 功能说明
android:layout_centerHoriazontal 控制该子组件是否相对于父容器水平居中
android:layout_centerVertical 控制该子组件是否相对于父容器垂直居中
android:layout_centerInParent 控制该子组件是否相对于父容器居中
android:layout_alignParentBottom 控制该子组件是否与父容器底端对齐
android:layout_alignParentTop 控制该子组件是否与父容器顶端对齐
android:layout_alignParentLeft 控制该子组件是否与父容器左端对齐
android:layout_alignParentRight 控制该子组件是否与父容器右端对齐
android:layout_alignParentEnd 控制该子组件是否与父容器结束对齐(大部分情况下与alignParentRight一个效果)
android:layout_alignParentStart 控制该子组件是否与父容器开始对齐(大部分情况下与alignParentLeft一个效果)

需要注意的是,这些属相是可以同时使用的,不过如果同时使用相互冲突的属性(比如layout_alignParentLeft和layout_alignParentRight)会产生一些比较古怪的效果,所以不建议同时使用有冲突的属性。

<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">
    <ImageView
        android:id="@+id/view1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:scaleType="fitXY"
        android:layout_alignParentLeft="true"
        android:layout_alignParentRight="true"
        android:layout_centerVertical="true"
        android:layout_centerHorizontal="true"
        android:src="@drawable/muogu" />
</RelativeLayout>

系统会努力去适应所有的属性,导致组件被拉伸成很古怪的样子。

3 只能设置为其他UI组件ID的xml属性

说明:这些属相就是RealtiveLayout的核心属性,就是通过这些属性,来确定各个子组件在布局方面的相互关系的。

以下是这类属性的属性表:

属性名 功能说明
android:layout_toRightOf 控制该子组件位于ID指定组件的右侧
android:layout_toLeftOf 控制该子组件位于ID指定组件的左侧
android:layout_above 控制该子组件位于ID指定组件的上方
android:layout_below 控制该子组件位于ID指定组件的下方
android:layout_alignTop 控制该组件顶端与ID指定组件的上边界对齐
android:layout_alignBottom 控制该底端组件与ID指定组件的下边界对齐
android:layout_alignLeft 控制该组件左端与ID指定组件的左边界对齐
android:layout_alignRight 控制该组件右端与ID指定组件的右边界对齐
android:layout_alignStart 控制该组件起始位置与ID指定组件的起始位置对齐(大部分情况下与layout_alignLeft效果相同)
android:layout_alignEnd 控制该组件结束位置与ID指定组件的结束位置对齐(大部分情况下与layout_alignRight效果相同)

另外可以使用margin或padding对组件进行细微的调整,如下所示:

 <RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <ImageView
        android:id="@+id/view1"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:layout_alignParentEnd="true"
        android:src="@drawable/nailiu16"
        android:scaleType="fitXY" />
    <ImageView
        android:id="@+id/view2"
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/muogu"
        android:scaleType="fitXY"
        android:layout_alignParentRight="true"
        android:layout_below="@+id/view1" />
    <ImageView
        android:layout_width="100dp"
        android:layout_height="100dp"
        android:src="@drawable/muogu"
        android:scaleType="fitXY"
        android:layout_margin="50dp"
        android:layout_alignParentRight="true"
        android:layout_alignBottom="@+id/view2" />
</RelativeLayout>

附:引用声明

《疯狂Android讲义(第二版)》 李刚 《2.2.4 相对布局》 电子工业出版社

时间: 2024-07-29 09:45:57

Android UI之RealtiveLayout(相对布局)的相关文章

Android UI设计规则

Android UI技巧 1.1 不该做什么 l  不要照搬你在其它平台的UI设计,应该让用户使用感觉是在真正使用一个Android软件,在你的LOGO显示和平台整体观感之间做好平衡 l  不要过度使用模态对话框 l  不要使用px单位,使用dp或者为文本使用sp l  不要使用固定的绝对定位的布局 l  不要使用太小的字体 1.2 该做什么 l  要为高分辨率的屏幕创建资源 l  要使用适当的间距 l  要正确管理活动(Activity) l  要正确处理屏幕的方向变化 l  需要点击的元素要

android UI布局

一.设置重复背景 在drawable文件夹下建一个mybackground.xml文件 在文件中写入: <?xml version="1.0" encoding="utf-8"?> <bitmap xmlns:android="http://schemas.android.com/apk/res/android" android:src="@drawable/mybg_img" android:tileMod

Android UI 使用HTML布局(直接打开服务器网页)

很多时候我们用HTML布局会更方便直接,记录一下. 我现在主要是直接调用服务器的网页(实际上是jsp的,只是返回的是html),所以需要联网,第一步添加权限. <uses-permission android:name="android.permission.INTERNET" /> 布局文件直接用一个WebView,如下: <?xml version="1.0" encoding="utf-8"?> <Linear

Android的Studio 2.2 预览 - 新的UI设计师和约束布局

Android的Studio 2.2中预览 - 新的UI设计师和约束布局 由贾马尔-陈奕迅,产品经理,机器人 本周在谷歌I / O 2016年,我们推出Android Studio 2.2中预览.该版本是一个大的更新是建立在我们重点打造Android的快速和高效集成开发环境(IDE).与Android平台开发同步的Andr??oid Studio允许您使用最新的Andr??oid API和功能开发.由于只是3年前在谷歌I / O推出Android的工作室,我们从您对您最想要的什么功能,收到很好的

Android UI之FrameLayout(帧布局)

Android UI之FrameLayout(帧布局) 说明:帧布局会为每个包含其中的组件开辟一个空白区域(称为帧),这些帧是一层层叠加在一起的,有点类似于一层层覆盖贴上去的海报,后面的组件会把前面的组件覆盖住. FrameLayout有两个比较特殊的常用属性需要注意: 1 android:foreground 对应方法:setForeground(Drawable) 说明:设置帧布局的前景图像,一般为布局添加pressed状态会用到这个属性来指定一个Drawable类型对象. 举个栗子: <F

Android UI布局与控件(二)

一.View类的常用xml属性:[了解] ①.Android中所有的UI(用户界面)元素都是使用View和ViewGroup对象建立的 ②.View是一个可以将一些信息绘制在屏幕上并与用户产生交互的对象 ③.ViewGroup是一个包含多个的View和ViewGroup的容器,用来定义UI布局. ④.Android提供了一系列的View和ViewGroup的子类,开发者可以灵活地组合使用它们来完成界面布 局.界 面元素绘制和用户交互等工作 ⑤.开发者还可以选择性地继承一些系统提供的View,来自

【转】Android UI 五种布局

在一个Android应用中,Layout是开发中的一个很重要环节,Layout是组成UI不可缺少的一部分. ## Android UI 核心类 在Android应用构建UI的方法有以下几种: 单纯使用JAVA代码 使用XML完全定义界面 结合使用两者,在XML中定义,在JAVA中引用和修改 Android SDK中关于UI的核心类: Android.view.View和android.view.ViewGroup android中的常见UI控件均会扩展View和ViewGroup其中有一部分是专

Android UI之GridLayout(网格布局)

说明:网格布局是4.0之后添加的布局,跟TableLayout有点像,但更加好用,它把容器分为一个rows*columns的网格,每个网格都是一个组件位,可是通过设置让组件位占据多行/列. 与之相似地,还有一个叫做GridView的组件,无论功能和名称都很相似,不过GridView使用Adapter来填充组件位,GridLayout则要简化得多. 按照CSDN博主studyboyjlu4(博客地址:http://blog.csdn.net/studyboyjlu4)的看法,GridView和Gr

Android UI布局之LinearLayout

LinearLayout是Android中最常用的布局之一,它将自己包含的子元素按照一个方向进行排列.方向有两种,水平或者竖直.这个方向可以通过设置android:orientation="vertical"或者android:orientation="horizontal"来实现,所有的元素排列都是一个接着一个的.如果是竖直排列,那么LinearLayout的元素就一个接着一个的从上到下竖直排列,例如,在下面的例子中,MainActivity的视图就是这样竖直的一