Android线性布局(Linear Layout)

LinearLayout是一个view组(view group),其包含的所有子view都以一个方向排列,垂直或是水平方向。我们能够用android:orientation属性来指定布局的方向。

图1

LinearLayout中所有的子view依次排列,所以垂直列表的每一行只有一个子view,而不管行有多宽。水平列表只有一个行高(行高由最高子view的高度+padding(填充)来决定)。LinearLayout关注子view之间的margins(边缘)和每个子view的gravity(对齐方式,右、中间或是左对齐)。

LinearLayout也支持用android:layout_weight属性为单个子view指定权重(weight)。这个属性为一个view指定一个非常重要的值,此值指定了该view需要占用屏幕上多大的空间。一个更大的权重值运行子view扩展到填充满其父view的剩余空间。子view能够指定权重值,然后view组中的剩余空间会按照声明的权重所占的比例来分配。默认的权重是0。

比如,如果有文本框(text field),其中两个声明权重为1,另一个没有指定权重(默认值为0)的文本框不会扩展,它只会占据它的内容所需要的区域。在所有这个三个文本框被测量后,其他两个文本框将平分剩余的空间。如果第3个文本框权重值为2,它就申明了自己比其他的文本框更重要,它占用了剩余空间的一半,另一半由那两个文本框平分。示例代码如下:

<?xml version="1.0" encoding="utf-8"?>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"

    android:layout_width="fill_parent"

    android:layout_height="fill_parent"

    android:paddingLeft="16dp"

    android:paddingRight="16dp"

    android:orientation="vertical">

    <EditText

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:hint="@string/to"/>

    <EditText

        android:layout_width="fill_parent"

        android:layout_height="wrap_content"

        android:hint="@string/subject"/>

    <EditText

        android:layout_width="fill_parent"

        android:layout_height="0dp"

        android:layout_weight="1"

        android:gravity="top"

        android:hint="@string/message"/>

    <Button

        android:layout_width="100dp"

        android:layout_height="wrap_content"

        android:layout_gravity="right"

        android:text="@string/send"/>

</LinearLayout>

还需要在LinearLayout\res\values\strings.XML文件中增加这些字符串的定义

<stringname="to">To</string>

<stringname="subject">Subject</string>

<stringname="message">Message</string>

<stringname="send">Send</string>

Activity中布局的效果如下图:

图2

为了更好去理解权重的意义,我们做一些修改,先来看下面一组权重值的效果:

(1)  To=subject=0(权重),message=2,显示如下:

图3

由于to和subject编辑框的属性android:layout_height="wrap_content"表示它们要求其高度可以包住内容,而且android:layout_weight="0"(或者是不用这个属性),0表示需要显示多大的视图就占据多大的屏幕空间,所以to和subjec编辑框就只占用能包住它们内容的屏幕空间就可以了。那message编辑框的权重只要不是为0,那么它就占用除去to和subject编辑框占用的空间之外的空间。

(2)  To=subject=1(权重),message=2,显示如下:

图4

虽然to和subject编辑框的属性android:layout_height="wrap_content",但因为它们的权重值为1(非零),则参与父view可用空间的分割,分割大小具体取决于每一个视图的layout_weight值以及该值在当前屏幕布局的整体 layout_weight值和在其它视图屏幕布局的layout_weight值中所占的比率而定,比如这里to和subject的权重值都为1,而message的为2,那么to和subject这两个view分别占用整个屏幕可用空间的1/4,而message占用2/4。

如果需要所有的子view大小一样,每个view的android:layout_height设置为0dp(对于垂直布局),或是每个view的android:layout_width设置为0dp(对于水平布局) ,然后设置每个view的android:layout_weight为1.

Android开发者Linear Layouts

http://developer.android.com/guide/topics/ui/layout/linear.html

Android布局---线性布局(Linear Layout)---别人翻译

http://www.2cto.com/kf/201301/183527.html

线性布局(Linear Layout)---理解应用

http://hi.baidu.com/justtmiss/item/a5b59909c688a6e4ff240dac

http://kb.cnblogs.com/page/73497/

Android线性布局(Linear Layout)的更多相关文章

  1. Android 线性布局(LinearLayout)相关官方文档 - 指南部分

    Android 线性布局(LinearLayout)相关官方文档 - 指南部分 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商业用 ...

  2. Android表格布局(Table Layout)

    Android表格布局(Table Layout) 先来看布局管理器之间继承关系图: 图1 可知TableLayout继承了LinearLayout,所以表格布局本质上依然是线性管理器. 表格布局采用 ...

  3. Android帧布局(Frame Layout)

    Android帧布局(Frame Layout) FrameLayout是最简单的一个布局管理器.FrameLayout为每个加入其中的组件创建一个空白区域(一帧),这些组件根据layout_grav ...

  4. Android 线性布局(LinearLayout)相关官方文档 - 布局參数部分

    Android 线性布局(LinearLayout)相关官方文档 - 布局參数部分 太阳火神的漂亮人生 (http://blog.csdn.net/opengl_es) 本文遵循"署名-非商 ...

  5. android—-线性布局

    android五大布局之线性布局. 1.线性布局的特点:各个子元素彼此连接,中间不留空白 而今天我们要讲解的就是第一个布局,LinearLayout(线性布局),我们屏幕适配的使用 用的比较多的就是L ...

  6. Android线性布局

    线性布局 LinearLayout 是一个视图组,用于使所有子视图在单个方向(垂直或水平)保持对齐. 您可以使用 android:orientation 属性指定布局方向. LinearLayout ...

  7. android 线性布局

    activity_main.xml线性布局 <?xml version="1.0" encoding="utf-8"?> <LinearLay ...

  8. Android线性布局和帧布局

    第二次,本牛崽十分从容,今天咱们来讲讲Android Q之布局,我遇到的问题与自己学到的,大牛不要嘲笑哈,有错误可以指出来,本牛崽看到就改了. 今天我的学长跟我们开始了布局,布局看资料说好像有5种,又 ...

  9. [android] 线性布局和布局的组合

    /****************2016年4月25日 更新******************************/ 知乎:对于开发者来说,Android 的开发者选项里有哪些实用的功能? 汤涛 ...

随机推荐

  1. 设计模式之原型模式(Prototype)

    1.出现原因 在软件系统中,经常面临着“某些结构复杂的对象”的创建工作:由于需求的变化,这些对象经常面临着剧烈的变化,但是它们却拥有比较稳定一致的接口. 如何应对这种变化?如何向“客户程序(使用这些对 ...

  2. Daily Scrum 11.9

    摘要:本次的meeting主要是继续讨论程序的问题以及单元测试和集成测试等,本次为1.01版本.本次的Task列表如下: Task列表 出席人员 Today's Task Tomorrow's Tas ...

  3. OC self super isa指针

    self指针: self是oc面向对象设计中的一个特殊指针,相当于java中的this,但是比this强大,this只能访问实例对象的相关方法和成员变量,或者说this只代表实例对象: self不仅可 ...

  4. Careercup - Facebook面试题 - 5344154741637120

    2014-05-02 10:40 题目链接 原题: Sink Zero in Binary Tree. Swap zero value of a node with non-zero value of ...

  5. IIS 分析器错误消息: 未能加载类型“_Default”

    还会出现不能加载程序集,如: using Model;using BLL;  均报错 但是在vs2012  iis express中调试正常, 按照网上方法: 我将vs  web项目下的目录全部cop ...

  6. 利用JavaScript获取页面文档内容

    JavaScript的document对象包含了页面的实际内容,所以利用document对象可以获取页面内容,例如页面标题.各个表单值. <!DOCTYPE html> <html ...

  7. 2876: [Noi2012]骑行川藏 - BZOJ

    Description 蛋蛋非常热衷于挑战自我,今年暑假他准备沿川藏线骑着自行车从成都前往拉萨.川藏线的沿途有着非常美丽的风景,但在这一路上也有着很多的艰难险阻,路况变化多端,而蛋蛋的体力十分有限,因 ...

  8. js收集的一些好的题型

    ①: var a = {x:1},b=a;var a = a.z = {Y:2}; 求a和b的值? ②:   var  w = (function a(){return '1'},function b ...

  9. sampler state

    昨天遇到一个非常诡异的错误 samplerstate 无法加大括弧定义 编译器非要一个: 而不要{ 去掉吧'''之后的编译似乎又会报某些ss没method 现在想想 也许是 samplerstate要 ...

  10. ios开发之触摸&手势识别

    概要: 4个触摸事件.6个手势识别.响应者链条 1.4个触摸事件 1> 触摸事件主要是针对视图的,包括 - (void)touchesBegan:(NSSet *)touches withEve ...