首先介绍常用布局类

  • FrameLayout 最简单的布局管理器。

  这个布局管理类有几个特性:

  1. 添加组件默认在左上角的。
  2. 如果添加多个组件会叠加到一起,并且都在左上角。(可以通过一gravity属性改变叠加情况)
  3. 后添加的组件在上层。
  • LinearLayout LinearLayout通过垂直方向和水平方面进行布局的,LinearLayout允许每一个视图都有一个weight属性。
  • RelativeLayout RelativeLayout是相对于其他的组件和屏幕边缘布局的管理类。
  • GridLayout GridLayout是Android4.0引入的概念,网格的布局方式,及其灵活,可以减少嵌套布局方式。

1.定义布局

定义一个简单的XML布局

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. xmlns:tools="http://schemas.android.com/tools"
  4. android:orientation="vertical"
  5. android:layout_width="fill_parent"
  6. android:layout_height="fill_parent"
  7. >
  8. <Button
  9. android:text="xxx"
  10. android:layout_width="match_parent"
  11. android:layout_height="wrap_content"/>
  12. </LinearLayout>

定义了一个线性布局方式,方向是垂直方向的(通过android:orientation="vertical"属性控制)

这里有三个常量我们将进行详细讲解fill_parent,match_parent,wrap_content。

  • fill_parent 填满父类的View,Fragment,Activity的空间。
  • wrap_content 把视图大小设置为显示内容的最小尺寸。
  • match_parent 从Android 2.2开始fill_parent改名为match_parent。

用java代码实现布局

  1. LinearLayout layout = new LinearLayout(this);
  2. layout.setOrientation(LinearLayout.VERTICAL);
  3.  
  4. Button button = new Button(this);
  5. button.setText("xxx");
  6.  
  7. int height = LinearLayout.LayoutParams.MATCH_PARENT;
  8. int weight = LinearLayout.LayoutParams.WRAP_CONTENT;
  9.  
  10. layout.addView(button, new LinearLayout.LayoutParams(height, weight));
  11. setContentView(layout);

这个代码也比较简单,不做详细介绍了。

2.使用布局创建和设备无关的UI

1.LinearLayout(线性布局)

线性布局是最简单的布局之一,简单但是缺少了灵活性。

  1. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:orientation="horizontal"
  3. android:layout_width="match_parent"
  4. android:layout_height="match_parent">
  5.  
  6. <Button
  7. android:layout_width="wrap_content"
  8. android:layout_height="wrap_content"
  9. android:text="xx1"
  10. />
  11. <Button
  12. android:layout_width="wrap_content"
  13. android:layout_height="wrap_content"
  14. android:text="xx2"
  15. />

  16.   <!--被嵌套的垂直LinearLayout布局-->
  17. <LinearLayout
  18. android:orientation="vertical"
  19. android:layout_width="match_parent"
  20. android:layout_height="match_parent">
  21. <Button
  22. android:layout_width="wrap_content"
  23. android:layout_height="wrap_content"
  24. android:text="xx3"/>
  25. <Button
  26. android:layout_width="wrap_content"
  27. android:layout_height="wrap_content"
  28. android:text="xx4"/>
  29. </LinearLayout>
  30. </LinearLayout>

效果下如图,这里有嵌套布局,一个水平布局的LinearLayout里面嵌套了一个竖直的LinearLayout布局方式。

2.RelativeLayout(相对布局)

RelativeLayout布局非常的灵活,主要针对边框和其他组件进行布局。

  1. <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
  2. android:layout_width="match_parent"
  3. android:layout_height="match_parent">
  4. <LinearLayout
  5. android:id="@+id/buttonBar"
  6. android:layout_alignParentBottom="true"
  7. android:orientation="horizontal"
  8. android:layout_width="match_parent"
  9. android:layout_height="wrap_content">
  10.  
  11. <Button
  12. android:text="xx1"
  13. android:layout_width="wrap_content"
  14. android:layout_height="wrap_content"/>
  15. <Button
  16. android:text="xx2"
  17. android:layout_width="wrap_content"
  18. android:layout_height="wrap_content"/>
  19. </LinearLayout>
  20.  
  21. <Button
  22. android:text="xx3"
  23. android:layout_above="@+id/buttonBar"
  24. android:layout_alignParentLeft="true"
  25. android:layout_width="wrap_content"
  26. android:layout_height="wrap_content">
  27. </Button>
  28. </RelativeLayout>

效果图如下

讲几个属性,这个属性对相对布局非常重要

  • android:layout_centerHrizontal  水平居中
  • android:layout_centerVertical 竖直居中
  • android:layout_centerInparent 相对于父类完全居中
  • android:layout_alignParentBottom 贴紧父元素的下边缘
  • android:layout_alignParentLeft 贴紧父元素的左边缘
  • android:layout_alignParentRight 贴紧父元素的右边缘
  • android:layout_alignParentTop 贴紧父元素的上边缘
  • android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物

来个小的总结

android:layout_centerInparent 相当于layout_centerHrizontal和layout_centerVertical一起用是一个效果,如果同时设置android:layout_alignParentBottom和android:layout_alignParentTop会把控件拉长和父类一样,同样道理android:layout_alignParentLeft和android:layout_alignParentRight也一样拉长控件。

  • android:layout_below 在某元素的下方
  • android:layout_above 在某元素的的上方
  • android:layout_toLeftOf 在某元素的左边
  • android:layout_toRightOf 在某元素的右边

来个小总结

如果同时设置了android:layout_below和android:layout_above并且id指向的是同一个控件,这是控件会消失不见。如果同时设置了android:layout_below和android:layout_above指定不同的控件会把控件拉长。

  • android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐
  • android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐
  • android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐
  • android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐

来个小总结

同样这样的布局方式也会有拉长的情况。

  • android:layout_marginBottom 离某元素底边缘的距离
  • android:layout_marginLeft 离某元素左边缘的距离
  • android:layout_marginRight 离某元素右边缘的距离
  • android:layout_marginTop 离某元素上边缘的距离

3.GridLayout(网格布局)

网格布局在Android3.0(API level 11)导入,是所有布局管理器中最灵活的一种。

  1. <?xml version="1.0" encoding="utf-8"?>
  2. <GridLayout xmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="wrap_content"
  4. android:layout_height="wrap_content"
  5. android:alignmentMode="alignMargins"
  6. android:orientation="horizontal"
  7. android:columnOrderPreserved="true"
  8. android:rowCount="3"
  9. android:rowOrderPreserved="true"
  10. android:columnCount="4">
  11.  
  12. <Button android:id="@+id/xx1" android:text="1" />
  13. <Button android:text="2" android:layout_column="0" android:layout_row="2"/>
  14. <Button android:text="3" android:layout_rowSpan="3" android:layout_gravity="fill"/>
  15. <Button android:text="4"/>
  16. <Button android:text="5"/>
  17. <Button android:text="6"/>
  18. <Button android:text="7"/>
  19. <Button android:text="8"/>
  20. <Button android:text="9"/>
  21. <Button android:text="10"/>
  22.  
  23. </GridLayout>

GridLayout下的属性

  • android:orientation  在GridLayout的根目录下,有两个属性horizontal和vertical顾名思义就是水平和竖直布局。
  • android:rowCount 网格的行数
  • android:columnCount 网格的列数

包含控件属性

  • android:layout_columnSpan 水平合并单元格
  • android:layout_rowSpan 竖直合并单元格
  • android:layout_gravity 有很多属性:fill,bottom 等等。

                  作者   Young-Ken(微博)

                  审阅者 Cindy-Leee(微博)转载请注明 http://www.cnblogs.com/youngKen/p/4831953.html

                         

Android UI -- 布局介绍(布局包括FrameLayout, LinearLayout, RelativeLayout, GridLayout)的更多相关文章

  1. 【转】Android UI 五种布局

    在一个Android应用中,Layout是开发中的一个很重要环节,Layout是组成UI不可缺少的一部分. ## Android UI 核心类 在Android应用构建UI的方法有以下几种: 单纯使用 ...

  2. Android UI组件:布局管理器

    为了更好的管理Android应用的用户界面中的组件,Android提供了布局管理器.通过使用布局管理器,Android应用的图形用户界面具有良好的平台无关性.通常,推荐使用布局管理器来管理组件的分布. ...

  3. Android UI测量、布局、绘制过程探究

    在上一篇博客<Android中Activity启动过程探究>中,已经从ActivityThread.main()开始,一路摸索到ViewRootImpl.performTraversals ...

  4. Android UI 使用HTML布局(直接打开server网页)

    非常多时候我们用HTML布局会更方便直接,记录一下. 我如今主要是直接调用server的网页(实际上是jsp的,仅仅是返回的是html).所以须要联网,第一步加入权限. <uses-permis ...

  5. android UI进阶之用【转】

    android UI进阶之用ViewPager实现欢迎引导页面 摘要: ViewPager需要android-support-v4.jar这个包的支持,来自google提供的一个附加包.大家搜下即可. ...

  6. Android开发1:基本UI界面设计——布局和组件

    前言 啦啦啦~本学期要开始学习Android开发啦~ 博主在开始学习前是完完全全的小白,只有在平时完成老师要求的实验的过程中一步一步学习~从此篇博文起,博主将开始发布Android开发有关的博文,希望 ...

  7. 【详细】Android入门到放弃篇-YES OR NO-》各种UI组件,布局管理器,单元Activity

    问:达叔,你放弃了吗? 答:不,放弃是不可能的,丢了Android,你会心疼吗?如果别人把你丢掉,你是痛苦呢?还是痛苦呢?~ 引导语 有人说,爱上一个人是痛苦的,有人说,喜欢一个人是幸福的. 人与人之 ...

  8. Android五大布局介绍&属性设置大全

    前言 在进行Android开发中,常常需要用到各种布局来进行UI的绘制,今天我们就来讲下Android开发中最常用的五大布局介绍和相关属性的设置. 目录 Android五大布局介绍&属性设置. ...

  9. 让我们创建屏幕- Android UI布局和控件

    下载LifeCycleTest.zip - 278.9 KB 下载ViewAndLayoutLessons_-_Base.zip - 1.2 MB 下载ViewAndLayoutLessons_-_C ...

随机推荐

  1. IOS调用相机和相册时无法显示中文

    调用系统相册.相机发现是英文的系统相簿界面后标题显示“photos”,但是手机语言已经设置显示中文 需要在info.plist做如下设置 info.plist里面添加 Localizedresourc ...

  2. ExtJs 自定义Vtype验证

    最近公司开发项目在用ExtJs,碰到验证的就大概的总结了一些常用的验证.自定义的验证主要有两种方式:一种是单字段的自定义验证,另一种是多字段间的验证.对于单字段的验证主要通过regex配置项指定自定义 ...

  3. bnuoj 4357 传送阵

    http://www.bnuoj.com/bnuoj/problem_show.php?pid=4357 [题意]:在1000个数中选择3个之和是m的倍数,可能有多种选择方案,请输出标号排序最小的一组 ...

  4. PAT-乙级-1010. 一元多项式求导 (25)

    1010. 一元多项式求导 (25) 时间限制 400 ms 内存限制 65536 kB 代码长度限制 8000 B 判题程序 Standard 设计函数求一元多项式的导数.(注:xn(n为整数)的一 ...

  5. uva 11069

    一开始打了个表  发现 a[i] = a[i-3]+a[i-2]; #include <iostream> #include <fstream> #include <cs ...

  6. Visual Leak Detector 2.2.3 Visual C++内存检测工具

      Visual Leak Detector是一款免费的.健全的.开源的Visual C++内存泄露检测系统.相比Visual C++自带的内存检测机制,Visual Leak Detector可以显 ...

  7. 2026-Keroro侵略地球

    描述 Keroro来侵略地球之前,曾跟Giroro伍长打赌:“我一个人灭掉整个地球给你看!”. 于是Keroro同学真的自己一个人来到地球开始他的侵略行动了.从K隆星出发之前,Keroro从Kurur ...

  8. Nginx/Apache日志分析脚本

    1,查看apache进程: ps aux | grep httpd | grep -v grep | wc -l 2,查看80端口的tcp连接: netstat -tan | grep "E ...

  9. CodeForces250B——Restoring IPv6(字符串处理)

    Restoring IPv6 DescriptionAn IPv6-address is a 128-bit number. For convenience, this number is recor ...

  10. XMPP聊天客户端环境搭建

    1.服务器选择:ejabberd,具体安装过程请参考:http://blog.csdn.net/linhanmin/article/details/9876819 2.客户端配置: 采用xmppfra ...