New UI-布局之RelativeLayout(相对布局)详解

http://download.csdn.net/detail/zpj779878443/8334001New
UI-布局之RelativeLayout(相对布局)详解

 ——转载请注明出处:coder-pig,欢迎转载,请勿用于商业用途!

小猪Android开发交流群已建立,欢迎大家加入,无论是新手,菜鸟,大神都可以,小猪一个人的

力量毕竟是有限的,写出来的东西肯定会有很多纰漏不足,欢迎大家指出,集思广益,让小猪的博文

更加的详尽,帮到更多的人,O(∩_∩)O谢谢!

小猪Android开发交流群:小猪Android开发交流群群号:421858269

新Android UI实例大全目录:http://blog.csdn.net/coder_pig/article/details/42145907

本节引言:

在上一节中我们对LinearLayout进行了详细的解析,谢谢大家的热情反馈,LinearLayout也是我们

用的比较多的一个布局,我们更多的时候更钟情于他的weight(权重)属性,等比例划分,对屏幕适配还是

帮助蛮大的;但是使用LinearLayout的时候也有一个问题,就是当界面比较复杂的时候,需要嵌套多层的

LinearLayout,这样就会降低UI Render的效率(渲染速度),而且如果是listview或者GridView上的

item,效率会更低,另外太多层LinearLayout嵌套会占用更多的系统资源,还有可能引发stackoverflow;

但是如果我们使用RelativeLayout的话,可能仅仅需要一层就可以完成了,以父容器或者兄弟组件+margin

+padding就可以设置组件的显示位置,是比较方便的!当然,也不是绝对的,具体问题具体分析吧!

总结就是:尽量使用RelativeLayout + LinearLayout的weight属性搭配使用吧!

1.本节核心图:

2.父容器定位属性的示意图:

3.根据兄弟组件定位

恩,先说下什么是兄弟组件吧,所谓的兄弟组件就是处于同一层次容器的组件,如图

图中的组件1,2就是兄弟组件了,而组件3与组件1或组件2并不是兄弟组件,所以组件3不能通过

组件1或2来进行定位,比如layout_toleftof = "组件1"这样是会报错的!切记!

关于这个兄弟组件定位的最经典例子就是"梅花布局"了,下面代码实现下:

运行效果图:

实现代码:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/RelativeLayout1"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >  

    <!-- 这个是在容器中央的 -->  

    <ImageView
        android:id="@+id/img1"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_centerInParent="true"
        android:src="@drawable/pic1"
    />  

    <!-- 在中间图片的左边 -->
    <ImageView
        android:id="@+id/img2"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_toLeftOf="@id/img1"
        android:layout_centerVertical="true"
        android:src="@drawable/pic2"
    />  

    <!-- 在中间图片的右边 -->
    <ImageView
        android:id="@+id/img3"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_toRightOf="@id/img1"
        android:layout_centerVertical="true"
        android:src="@drawable/pic3"
    />  

    <!-- 在中间图片的上面-->
    <ImageView
        android:id="@+id/img4"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_above="@id/img1"
        android:layout_centerHorizontal="true"
        android:src="@drawable/pic4"
    />  

    <!-- 在中间图片的下面 -->
    <ImageView
        android:id="@+id/img5"
        android:layout_width="80dp"
        android:layout_height="80dp"
        android:layout_below="@id/img1"
        android:layout_centerHorizontal="true"
        android:src="@drawable/pic5"
    />  

</RelativeLayout>  

4.margin与padding的区别:

初学者对于这两个属性可能会有一点混淆,这里区分下:

首先margin代表的是偏移,比如marginleft = "5dp"表示组件离容器左边缘偏移5dp;

而padding代表的则是填充,而填充的对象针对的是组件中的元素,比如TextView中的文字

比如为TextView设置paddingleft = "5dp",则是在组件里的元素的左边填充5dp的空间!

margin针对的是容器中的组件,而padding针对的是组件中的元素,要区分开来!

下面通过简单的代码演示两者的区别:

代码如下:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context=".MainActivity" >  

    <Button
        android:id="@+id/btn1"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="Button"
    />
    <Button
        android:paddingLeft="100dp"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="Button"
        android:layout_toRightOf="@id/btn1"
    />  

    <Button
        android:id="@+id/btn2"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="Button"
        android:layout_alignParentBottom="true"
    />
    <Button
        android:layout_marginLeft="100dp"
        android:layout_height="wrap_content"
        android:layout_width="wrap_content"
        android:text="Button"
        android:layout_toRightOf="@id/btn2"
        android:layout_alignParentBottom="true"
    />  

</RelativeLayout>

运行效果图:

相信大家看效果图就可以知道这两个的区别了!

5.很常用的一点:margin可以设置为负数

相信很多朋友都不知道一点吧,平时我们设置margin的时候都习惯了是正数的,

其实是可以用负数的,下面写个简单的程序演示下吧,模拟进入软件后,弹出广告

页面的,右上角的cancle按钮的margin则是使用负数的!

效果图:

贴出的广告Activity的布局代码吧,当然,如果你对这个有兴趣的话可以下下demo,

因为仅仅是实现效果,所以代码可能会有点粗糙!

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context="com.jay.example.relativelayoutdemo.MainActivity"
    android:background="#00CCCCFF">

    <ImageView
        android:id="@+id/imgBack"
        android:layout_width="200dp"
        android:layout_height="200dp"
        android:layout_centerInParent="true"
        android:background="@drawable/myicon" />

    <ImageView
        android:id="@+id/imgCancle"
        android:layout_width="28dp"
        android:layout_height="28dp"
        android:layout_alignRight="@id/imgBack"
        android:layout_alignTop="@id/imgBack"
        android:background="@drawable/cancel"
        android:layout_marginTop="-15dp"
        android:layout_marginRight="-10dp" />

</RelativeLayout>

恩,那么本节关于RelativeLayout的详细解答就到这里,如果发现有什么遗漏,或者好玩的

笔者一定mark下来,分享给大家,O(∩_∩)O谢谢!

RelativeLayoutDemo代码下载:http://download.csdn.net/detail/zpj779878443/8334001

时间: 2024-10-25 05:46:46

New UI-布局之RelativeLayout(相对布局)详解的相关文章

Android精通:View与ViewGroup,LinearLayout线性布局,RelativeLayout相对布局,ListView列表组件

UI的描述 对于Android应用程序中,所有用户界面元素都是由View和ViewGroup对象构建的.View是绘制在屏幕上能与用户进行交互的一个对象.而对于ViewGroup来说,则是一个用于存放其他View和ViewGroup对象的布局容器! Android为我们提供了View和ViewGroup的两个子类的集合,提供常用的一些输入控件(比如按钮,图片和文本域等)和各种各样的布局模式(比如线程布局,相对布局,绝对布局,帧布局,表格布局等). 用户界面布局 在你APP软件上的,用户界面上显示

Android精通:TableLayout布局,GridLayout网格布局,FrameLayout帧布局,AbsoluteLayout绝对布局,RelativeLayout相对布局

在Android中提供了几个常用布局: LinearLayout线性布局 RelativeLayout相对布局 FrameLayout帧布局 AbsoluteLayout绝对布局 TableLayout表格布局 GridLayout网格布局 TableLayout表格布局 TableLayout的介绍 TableLayout是将子类向分别排列成行和列的布局视图容器,TableLayout是由许多TableRow对象组成的,表格布局以行列的形式管理子控件,每一个单元是一个TableRow或者Vie

Android布局控件之LinearLayout详解

LinearLayout是线性布局控件,它包含的子控件将以横向或竖向的方式排列,按照相对位置来排列所有的widgets或者其他的containers,超过边界时,某些控件将缺失或消失.因此一个垂直列表的每一行只会有一个widget或者是container,而不管他们有多宽,而一个水平列表将会只有一个行高(高度为最高子控件的高度加上边框高度).LinearLayout保持其所包含的widget或者是container之间的间隔以及互相对齐(相对一个控件的右对齐.中间对齐或者左对齐). xml属性

【Android UI设计与开发】之详解ActionBar的使用

详解Android中的ActionBar的使用 请尊重他人的劳动成果,转载请注明出处:详解Android中的ActionBar的使用 http://blog.csdn.net/fengyuzhengfan/article/details/40216389 ActionBar是Android 3.0(API level 11)引入的一个新控件,它代表了应用程序标题栏,如果要开发兼容的程序,可以使用v7包下的ActionBar.我们在应用中看见的ActionBar一般是下图的样子,比如有道词典及微信

Flex布局新写法兼容写法详解

很久之前用过flex,但是没有考虑过兼容性问题,为了兼容ios一定要加上-webkit前缀: ul{ display: flex; /* 新版本语法: Opera 12.1, Firefox 22+ */ display: -webkit-flex; } li{ flex:1 0 auto; -webkit-flex:1 0 auto; 合并写法,不缩放宽度 flex-shink = 0 } 注意:用过flex布局后,子元素的float,position都没有效了 flex布局教程参考网址,非常

Flutter 布局(一)- Container详解

本文主要介绍Flutter中非常常见的Container,列举了一些实际例子介绍如何使用. 1. 简介 A convenience widget that combines common painting, positioning, and sizing widgets. Container在Flutter中太常见了.官方给出的简介,是一个结合了绘制(painting).定位(positioning)以及尺寸(sizing)widget的widget. 可以得出几个信息,它是一个组合的widge

web前端入门到实战:html/css弹性布局的几大常用属性详解

弹性布局的名称概念: 1.容器:需要添加弹性布局的父元素:项目:弹性布局容器中的每一个子元素,称为项目. 2.主轴:在弹性布局中,我们会通过属性规定水平/垂直方向(flex-direction)为主轴:与主轴垂直的另一方向,称为交叉轴. 弹性布局的重要的几大基础属性: 1.flex-direction属性决定主轴的方向(即项目的排列方向). row(默认值): 主轴为水平方向,起点在左端: row-reverse: 主轴在水平方向,起点在右端 : column:主轴为垂直方向,起点在上沿. co

Python连载60-Tkinter布局、按钮以及属性详解

一.Tkinter? 1.组件的大致使用步骤 (1)创建总面板 (2)创建面板上的各种组件: i.指定组件的父组件,即依附关系:ii.利用相应的属性对组件进行设置:iii.给组件安排布局. (3)同步骤2相似,创建好多个组件: (4)最后,启动总面板的消息循环 import tkinter ? base = tkinter.Tk() base.wm_title("Label Test")#负责标题 lb = tkinter.Label(base,text="Python la

Flex布局新旧混合写法详解(兼容微信)

flex是个非常好用的属性,如果说有什么可以完全代替 float 和 position ,那么肯定是非它莫属了(虽然现在还有很多不支持 flex 的浏览器).然而国内很多浏览器对 Flex 的支持都不是很好,这里针对微信内置浏览器写了一套兼容写法.下面入正题. 首先还是从两个版本的语法开始讲吧,这里还是假设flex容器为 .box ,子元素为 .item . 旧语法篇 定义容器的display属性 .box{ display: -moz-box; /*Firefox*/ display: -we

IOS开发UI篇之tableView 的用法详解

1.我们知道tableView是IOS中的高级视图,其继承与ScrollView,故我们知道他有具有ScrollView的所有功能.而且还扩展了许多.当然在这里就不一一介绍了. 2.tableView的表现格式分两种Plain和Grouped两种风格 3.tableView的两种代理类delegate和dataSource.这两种代理至关重要,我们在做tableView和这些代理是分不开的. 4.代理中比较常用的代理方法: (1)dataSource的两个必须使用的代理 @required //