【Android】界面布局之 LinearLayout(线性布局)

转载 2011年01月15日 11:24:00

  线性布局是程序中最常见的一种布局方式,线性布局可以分为水平线性布局和垂直线性布局两种,通过android:orientation属性可以设置线性布局的方向。下面是一个简单的线性布局的例子:
  <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  >
  <EditText
  android:layout_width="fill_parent"
  android:layout_height="wrap_content" />
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="wrap_content"
  android:gravity="right">
  <Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="确定"/>
  <Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="取消"/>
  </LinearLayout>
  </LinearLayout>
  对应的模拟器上的布局效果以及框架图如下所示:


  最外层布局为垂直线性布局,宽度为整个屏幕(fill_parent),高度为刚好适合子控件(wrap_content)。然后依次添加一个EditText,一个水平布局的LinearLayout,在这个线性布局里面,摆放两个Button,该线性布局的gravity属性设置为”right”,所以里面的两个Button靠右显示。
  1、android:gravity
  LinearLayout标签有一个非常重要的属性gravity,该属性用于控制布局中控件的对齐方式。如果是没有子控件的控件设置此属性,表示其内容的对齐方式,比如说TextView里面文字的对齐方式;若是有子控件的控件设置此属性,则表示其子控件的对齐方式,比如上面例子里面的两个Button的对齐方式。gravity可以取以下值,如果需要设置多个属性值,需要使用“|”进行组合:


  android:gravity与android:layout_gravity的区别:android:gravity定义了这个元素内所有子元素对于这个元素的布局,比如一个TextView内部文字的对齐方式;android:layout_gravity定义了这个元素相对于父元素(比如Layout)的布局,比如一个TextView在整个Layout中的位置。这两个属性对应的常量值都是一样的,如上表所示。
  2、android: layout_weight
  首先需要注意的是,没有android:weight这样的属性,这个与上面的android:gravity不一样。我们可以通过设置控件的layout_weight属性以控制各个控件在布局中的相对大小。layout_weight属性是一个非负整数值。线性布局会根据该控件layout_weight值与其所处布局中所有控件layout_weight值之和的比值为该控件分配占用的区域。例如,在水平布局的LinearLayout中有两个Button,这两个Button的layout_weight属性值都为1,那么这两个按钮都会被拉伸到整个屏幕宽度的一半。如果layout_weight指为0,控件会按原大小显示,不会被拉伸;对于其余layout_weight属性值大于0的控件,系统将会减去layout_weight属性值为0的控件的宽度或者高度,再用剩余的宽度或高度按相应的比例来分配每一个控件显示的宽度或高度。下例简要说明该属性的用法:
  <?xml version="1.0" encoding="utf-8"?>
  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
  android:orientation="vertical" android:layout_width="fill_parent"
  android:layout_height="fill_parent">
  <!-最上面的两个按钮-->
  <LinearLayout android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:layout_weight="1"><!-同一层次的三个LinearLayout的layout_weight都设置为1,每一个都占据三分之一的空间-->
  <LinearLayout
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:layout_weight="1">
  <Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="左上按钮"
  android:layout_gravity="left" /><!-因为外层的LinearLayout定义为垂直布局,这里定义为在Layout里面靠左显示,所以就显示在左上角-->
  </LinearLayout>
  <LinearLayout
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:layout_weight="1">
  <Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="右上按钮"
  android:layout_gravity="right" />
  </LinearLayout>
  </LinearLayout>
  <!-中心的按钮-->
  <LinearLayout
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:layout_weight="1" <!-同一层次的三个LinearLayout的layout_weight都设置为1,每一个都占据三分之一的空间-->
  android:gravity="center">
  <Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="中心按钮" />
  </LinearLayout>
  <!-最下面的两个按钮-->
  <LinearLayout
  android:orientation="horizontal"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:layout_weight="1"><!-同一层次的三个LinearLayout的layout_weight都设置为1,每一个都占据三分之一的空间-->
  <LinearLayout android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:layout_weight="1"
  android:gravity="left|bottom"><!-定义其内部元素的对齐方式:左下角-->
  <Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="左下按钮" />
  </LinearLayout>
  <LinearLayout
  android:orientation="vertical"
  android:layout_width="fill_parent"
  android:layout_height="fill_parent"
  android:layout_weight="1"
  android:gravity="right|bottom"><!-定义其内部元素的对齐方式:右下角-->
  <Button
  android:layout_width="wrap_content"
  android:layout_height="wrap_content"
  android:text="右下按钮"/>
  </LinearLayout>
  </LinearLayout>
  </LinearLayout>
  对应的模拟器上的布局效果以及框架图如下所示:

Android LinearLayout线性布局(上下左右 正中间)示例

我先把整个
  • u013372185
  • u013372185
  • 2014年06月07日 13:31
  • 5725

初入android之LinearLayout嵌套线性布局

最终的效果如下,实现五个TextView控件在布局中成图中排列: 控件的嵌套层次如下图: 嵌套的核心思想:从给出的设计图可以看出TextView控件的分...
  • u013398034
  • u013398034
  • 2015年09月17日 21:23
  • 4148

线性布局下,如何最左或者最右

线性布局下,如何在一行中,一个按钮位于最左边,一个最右边? 这个如果用RelativeLayout控制就很容易,要是用LinearLayout也不是不可能。思路就是在中间放置一个控件,让其透明,并设...
  • jkkjklmn
  • jkkjklmn
  • 2015年03月31日 10:53
  • 12575

线性布局控制控件居右显示

用到的属性: android:layout_width=”0dp” android:layout_weight=”1”
  • xiyangyang8110
  • xiyangyang8110
  • 2016年10月01日 21:17
  • 985

RelativeLayout和LinearLayout性能比较 相对布局和线性布局的性能比较

RelativeLayout和LinearLayout性能比较 相对布局和线性布局的性能比较 【原文链接】 :http://blog.csdn.net/guyuealian/article/det...
  • jushenziao
  • jushenziao
  • 2016年09月29日 14:04
  • 3448

用LinearLayout和RelativeLayout分别实现简单的登陆界面

LinearLayout是最简单也是最常用的一种布局方式,它根据orientation 属性值,将包含的所有控件或布局对象排列在同一个方向:水平或垂直,在这种布局中,所有的控件都是依序排列成一条线。在...
  • u013128651
  • u013128651
  • 2016年03月15日 23:38
  • 926

android 线性布局 位置 详解

在看本文之前,你可以先问自己个问题一个宽和高都是fill_parent的水平线性布局中只有一个按钮控件,请问怎样使得这个按钮控件居右且居下显示呢?如果有两个按钮控件,怎样使一个按钮居左下,一个按钮居右...
  • lcugym
  • lcugym
  • 2014年03月07日 12:03
  • 1360

线性布局下最左/右问题

在Android中,只有垂直的linearlayout属性里面的内部组件靠左靠右才有效,同理,水平的linearlayout属性里面的内部组件靠上靠下才有效,否则无效。 由此考虑如何让水平linear...
  • hxqneuq2012
  • hxqneuq2012
  • 2016年12月02日 17:13
  • 401

Android线性布局管理器LinearLayout创建--动态生成

public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { ...
  • vincent890120
  • vincent890120
  • 2013年12月11日 14:28
  • 712

LinearLayout——线性布局(上)

android:baselineAligned 默认为true,当android:orientation=“horizontal ”,其子View的baseline 是对齐的,表现在不同View显示的...
  • beyond_time
  • beyond_time
  • 2013年08月01日 23:46
  • 3611
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:【Android】界面布局之 LinearLayout(线性布局)
举报原因:
原因补充:

(最多只允许输入30个字)