线性和相对布局的总结

android的布局属性参考资料:
http://blog.csdn.net/webrobot/article/details/7425078 

线性布局笔记如下:

android:layout_marginTop属性
指的是该View或者布局(如线性布局)的上方的空间.
而不要错误地理解为是距离父元素顶部的距离(除非它是此父元素的第一个控件).
但是在相对布局中不是这样的,在相对布局中指的是就是距离其父元素的顶部的距离!!!(这句错误,见下)
错误分析:
在线性布局中因为总是垂直或者水平的.它是有序的.所以这个margin就是相对于父控件而言的.
但在相对布局中默认:所以控件都是从一个位置叠加的.所以需要指定某个控件距离顶部的距离.
但是如果A控件通过android:layout_below指定了其在B控件之下,那么这里的layout_marginTop
指的就是A距离B的距离,而不是距离父控件顶部的距离.关键还是在于要深刻理解,相对布局中
"相对"二字

android:layout_gravity属性
指定子View相对于父容器如何摆放

android:gravity属性
指定本元素或者其所有子元素的重力方向(即如何布局)!!
比如指定某个Button中的文字在底部.可采用android:gravity="bottom"
比如指定某个布局下的所有子元素都靠左边可采用android:gravity="left"

LinerLayout的gravity属性描述:
http://www.cnblogs.com/olvo/archive/2012/05/04/2482440.html
这个东西在布局文件中敲一下即可看出来

注意
1 android:layout_gravity和android:layout_weight
  只能当子View位于LinearLayout或者TableLayout里才能应用!!!
2 android:gravity在线性布局和相对布局中都可以使用!!!!

LinearLayout中android:layout_gravity不起作用的例子及分析:
参考资料:
http://www.cnblogs.com/olvo/archive/2012/05/21/2511632.html
注意细节:
因为LinearLayout默认的是:android:orientation="horizontal"
得出结论:
当作为父layout的LinearLayout的属性为android:orientation="vertical"时,android:layout_gravity="?"
此处设为横向的时候才能生效.比如:left,right,center_horizontal等

当作为父layout的LinearLayout的属性为android:orientation="horizental"时,android:layout_gravity="?"
此处设为纵向的时候才能生效.比如top,bottom,center_vertical等

当然也可以这么做:在LinearLayout设置 android:gravity="right" android:orientation="horizontal"
然后在子View中设置android:layout_gravity="right"可以起到作用(废话)

原因分析:
因为android:orientation规定了整个布局的大方向,是从左到右还是至上而下.
比如android:orientation="vertical"那么在大体上就该按照至上而下的方式来.不能随意更改子View的纵向布局.
只可以在一定距离的纵向范围内,横向改变其位置.android:orientation="horizontal"时,原理类似

所以,在线性布局中android:layout_gravity="bottom|right" 不可以将控件放在右下角.
可以使用相对布局来实现:
android:layout_alignParentRight="true"
android:layout_alignParentBottom="true"
这样就到了右下角

继续在此看一个小问题:

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

    <Button
        android:id="@+id/button1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="20dip"
        android:layout_gravity="right"
        android:text="Button1" />

    <Button
        android:id="@+id/button2"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginRight="10dip"
        android:text="Button2" />

</LinearLayout>

 

为什么Button1没有在最右边.而是Button2在最右边.Button1在Button2的左边?
1 方向是horizontal也就是说从左到右排列的.
2 android:gravity="right"即所有的控件都靠右边.
  于是首先Button1靠了右边,但是紧接着Button2来了它也靠右.挤开了Button1

 

 

相对布局笔记如下:
重要参考资料:
http://blog.csdn.net/johnny901114/article/details/7865617  此资料不错
http://blog.csdn.net/huangxy10/article/details/8181082  相对和线性布局的对比 很不错
但是该资料有错误的地方:
android:layout_gravity和android:layout_weight
只能当子View位于LinearLayout或者TableLayout里才能应用!!!!!
这个对比给出一个结论:就是说某个属性在该控件中到底能否起到作用,还是要看其父布局是什么.

结论举例1,比如:
在一个RelativeLayout下有一个TextView控件,那么它就有android:layout_centerInParent=""属性
但是在LinerLayout下TextView控件就没有android:layout_centerInParent=""属性!!!!!!!

结论举例2,比如:
线性布局根本没有这么几个对齐方式:
android:layout_centerHorizontal   为true,将该控件的置于水平居中;
android:layout_centerVertical     为true,将该控件的置于垂直居中;
android:layout_centerInParent     为true,将该控件的置于父控件的中央(同时设置水平和垂直居中);
但是当某线性布局的的父元素是相对布局,那么它也是具有这些属性!!!!

小结:
1 相对布局中不存在属性android:orientation,但是如果写了也是不会报错的.
2 在RelativeLayout布局中居中是采用android:layout_centerxxx来实现的.
  而在LinerLayout布局中居中是采用 android:gravity来实现的.

有这么一种情况
在相对布局中,控件的布局如下:

 <ImageButton
            android:id="@+id/report_left"
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_alignParentLeft="true"
            android:layout_centerVertical="true"
            android:layout_marginLeft="5dp"
            android:background="@drawable/tanteimodoru"
            android:padding="5dp"
 />

注意:
同时设置了android:layout_alignParentLeft="true"和 android:layout_marginLeft="5dp"
也就是说相对于父控件的左边对齐,同时设置了layout_marginLeft.
所以ImageButton不会真的靠左对齐,存在5dp的距离

 

 

时间: 2024-09-25 02:36:49

线性和相对布局的总结的相关文章

android技巧:android xml布局总结

一.背景 可能很多人跟我一样,做了好久的android程序,却一直没有认真地坐下来好好学习下xml文件的布局.其实有的时候我们用view绘制或是利用ADT的图形界面功能就可以轻松搞定布局,但是最好还是静下来学习下xml的布局文件具体写法.这一节我们要绘制如下图所示的界面. 二基础知识 首先我们要了解android到底有那些布局,和每个布局类型的区别. 1.线性布局 LinearLayout 线性布局分两种.一种是水平布局,一种是垂直布局.下面我们根据上图举例子. 先把上图的代码贴出来吧! <?x

android-把 button 放在框架布局 frame layout 左边的问题

问题描述 把 button 放在框架布局 frame layout 左边的问题 在一个垂直的线性布局中设置了两个textviews,还有一个button和一个frame layout框架布局. 我要把按钮放在框架布局的左边,并把按钮放在 relative layout布局中. 但是如何把框架布局 frame layout 放在右边呢? <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

5大黄金准则帮你设计移动端邮件

  用移动端收邮件的人越来越多,如何令邮件变得清晰易读也成了一个设计难点.今天分享5个实战经验中总结的设计准则,帮你搞定小屏幕上的邮件设计 >>> 移动设备上的邮件设计不仅仅是一个内容填充列表,它涉及诸多设计元素. 对于移动设备的设计从来不是一件简单的事情.人们采用不同的方式使用网络,我们需要考虑一个全面的方案,特别是在小屏幕上使用邮件. 让我们一起来探讨关于移动设备上的邮件设计需要考虑的问题,这些讨论并不意味着能够解答手机邮件设计上的所有问题,但这是一个好的起点. 一.保持简洁 严禁复

Android RecyclerView实现下拉刷新和上拉加载_Android

RecyclerView已经出来很久了,许许多多的项目都开始从ListView转战RecyclerView,那么,上拉加载和下拉刷新是一件很有必要的事情. 在ListView上,我们可以通过自己添加addHeadView和addFootView去添加头布局和底部局实现自定义的上拉和下拉,或者使用一些第三方库来简单的集成,例如Android-pulltorefresh或者android-Ultra-Pull-to-Refresh,后者的自定义更强,但需要自己实现上拉加载. 而在下面我们将用两种方式

Google Web开发最佳实践(一)

这篇文章最初是在阿里通信前端团队的github博客(http://aliqin.github.io)上看到的,原文地址https://developers.google.com/web/fundamentals/(要翻墙).既然要去阿里了,就得先熟悉熟悉环境,既然是最佳实践,就得自己亲自实践一下. 1.创建网站的内容和结构 内容是任何网站最重要的部分.所以让我们为内容而设计,而不要让设计支配内容.在这个手册中,我们首先确定我们需要的内容,基于这个内容创建一个页面结构,然后在简单的线性布局里呈现页

Android RecyclerView实现下拉刷新和上拉加载

RecyclerView已经出来很久了,许许多多的项目都开始从ListView转战RecyclerView,那么,上拉加载和下拉刷新是一件很有必要的事情. 在ListView上,我们可以通过自己添加addHeadView和addFootView去添加头布局和底部局实现自定义的上拉和下拉,或者使用一些第三方库来简单的集成,例如Android-pulltorefresh或者android-Ultra-Pull-to-Refresh,后者的自定义更强,但需要自己实现上拉加载. 而在下面我们将用两种方式

探索Windows Azure驱动器,磁盘以及镜像

使用Windows http://www.aliyun.com/zixun/aggregation/13357.html">Azure 虚拟机预览版,我们有两个新特殊类型的blob 存储在Windows Azure 存储器上: Windows Azure 虚拟机磁盘和Windows Azure 虚拟机镜像.当然,我们也有Windows Azure 驱动器预览版.在这篇文章的以下余部分,我们会参考这些存储器. 磁盘. 镜像和驱动器.本文探讨了什么是驱动器. 磁盘和镜像以及如何与存储进行交互.

Android开发入门(五)屏幕组件 5.2 LinearLayout线性布局

LinearLayout把视图组织成一行或一列.子视图能被安排成垂直的或水平的.想知道LinearLayout是如何 工作的,首先考虑一下典型的mail.xml文件. <?xml version="1.0" encoding="utf-8"?> <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width

Android开发之线性布局

一.基础知识:    id="@+id/edtInput",ID 是连接UI 与代码的桥梁   layout_width="fill_parent" ,自动填充至屏幕宽度   layout_width="wrap_content" ,自动填充为控件大小     在LinearLayout 里面的控件,按照水平或者垂直排列:    orientation="horizontal" :水平排列:    orientation=&q