`
yidongkaifa
  • 浏览: 4069628 次
文章分类
社区版块
存档分类
最新评论

Android用户界面设计:线性布局

 
阅读更多

什么是线性布局

线性布局是最简单,Android开发者使用得最多的布局类型之一,开发者用它来组织你们的用户界面上的控件。线性布局的作用就像它的名字一样:它将控件组织在一个垂直或水平的形式。当布局方向设置为垂直时,它里面的所有子控件被组织在同一列中;当布局方向设置为水平时,所有子控件被组织在一行中。

线性布局可以在XML布局资源文件中定义,也可以用Java代码在程序中动态的定义。

下图展示了一个包含7个TextView控件的线性布局。这个线性布局方向被设置为垂直,导致每个TextView控件被显示在一列当中。每一个TextView控件的文本属性都是一个颜色值,背景色就是这个颜色;通过将控件的layout_width属性设置为fill_parent,每个控件都拉伸到屏幕宽度。

TextView控件的线性布局

用XML布局资源定义线性布局

设计程序用户界面最方便和可维护的方法是创建XML布局资源。这个方法极大地简化了UI设计过程,它将很多静态创建和用户界面控件的布局以及控件属性的定义移到了XML中,而不是写代码。

XML布局资源必须被存储在项目目录的/res/layout下。让我们看看前一节介绍的彩虹线性布局。这个屏幕基本上就是一个设置为铺满整个屏幕的垂直线性布局,这通过设置它的layout_width和layout_height属性为fill_parent来实现。适当地将其命名为/res/layout/rainbow.xml,XML定义如下:

  1. <?xmlversion="1.0"encoding="utf-8"?>
  2. <LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
  3. android:layout_width="fill_parent"android:layout_height="fill_parent"
  4. android:orientation="vertical">
  5. <TextViewandroid:text="RED"android:id="@+id/TextView01"
  6. android:layout_height="wrap_content"android:background="#f00"
  7. android:layout_width="fill_parent"android:layout_weight=".14"
  8. android:gravity="center"android:textColor="#000"></TextView>
  9. <TextViewandroid:text="ORANGE"android:id="@+id/TextView02"
  10. android:layout_height="wrap_content"android:layout_width="fill_parent"
  11. android:layout_weight=".15"android:background="#ffa500"
  12. android:gravity="center"android:textColor="#000"></TextView>
  13. <TextViewandroid:text="YELLOW"android:id="@+id/TextView03"
  14. android:layout_height="wrap_content"android:layout_width="fill_parent"
  15. android:layout_weight=".14"android:background="#ffff00"
  16. android:gravity="center"android:textColor="#000"></TextView>
  17. <TextViewandroid:text="GREEN"android:id="@+id/TextView04"
  18. android:layout_height="wrap_content"android:layout_width="fill_parent"
  19. android:layout_weight=".15"android:background="#0f0"android:gravity="center"
  20. android:textColor="#000"></TextView>
  21. <TextViewandroid:text="BLUE"android:id="@+id/TextView05"
  22. android:layout_height="wrap_content"android:layout_width="fill_parent"
  23. android:layout_weight=".14"android:background="#00f"android:gravity="center"
  24. android:textColor="#fff"></TextView>
  25. <TextViewandroid:text="INDIGO"android:id="@+id/TextView06"
  26. android:layout_height="wrap_content"android:layout_width="fill_parent"
  27. android:layout_weight=".14"android:background="#4b0082"
  28. android:gravity="center"android:textColor="#fff"></TextView>
  29. <TextViewandroid:text="VIOLET"android:id="@+id/TextView07"
  30. android:layout_height="wrap_content"android:layout_width="fill_parent"
  31. android:layout_weight=".14"android:background="#ee82ee"
  32. android:gravity="center"android:textColor="#000"></TextView>
  33. </LinearLayout>

可能你会注意到这个线性布局的每一个子控件都有很多有趣的属性,包括一个叫做layout_weight的属性。一会我们会讲到更多关于它的内容。

下面两张图片展示了这个布局在设备的竖屏和横屏模式下的样子:

用XML布局资源定义线性布局

用XML布局资源定义线性布局

回忆一下,在Activity中,只需要一行有onCreate()方法的代码来在屏幕上加载和显示一个布局资源。如果这个布局资源被存储在/res/layout/rainbow.xml文件中,这行代码应该是:

  1. setContentView(R.layout.rainbow);
  2. 用程序动态定义线性布局

    你也可以通过程序来创建和配置线性布局。这通过LinearLayout(android.widget.LinearLayout)类来实现。你能在LinearLayout.LayoutParams类中找到子级细节。同样地,典型的布局参数(android.view.ViewGroup.LayoutParams),如layout_height和layout_width, 以及边距参数(ViewGroup.MarginLayoutParams)也能用在LinearLayout对象上。

    使用以前介绍过的setContentView()方法代替直接加载布局资源,你需要用Java创建屏幕内容,然后向setContentView()方法提供一个父级布局对象,这个对象包括了所有要作为它的子视图展示的控件内容。在这种情况下,你的父级布局对象是线性布局。

    例如,下面的代码示例了如何用程序在Activity中实例化一个线性布局并在它的onCreate()方法中将三个TextView对象放入其中:

    1. publicvoidonCreate(BundlesavedInstanceState){
    2. super.onCreate(savedInstanceState);
    3. //setContentView(R.layout.rainbow);
    4. TextViewtv1=newTextView(this);
    5. tv1.setText("FIRST");
    6. tv1.setTextSize(100);
    7. tv1.setGravity(Gravity.CENTER);
    8. TextViewtv2=newTextView(this);
    9. tv2.setTextSize(100);
    10. tv2.setGravity(Gravity.CENTER);
    11. tv2.setText("MIDDLE");
    12. TextViewtv3=newTextView(this);
    13. tv3.setTextSize(100);
    14. tv3.setGravity(Gravity.CENTER);
    15. tv3.setText("LAST");
    16. LinearLayoutll=newLinearLayout(this);
    17. ll.setOrientation(LinearLayout.VERTICAL);
    18. ll.setLayoutParams(newLayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
    19. ll.setGravity(Gravity.CENTER);
    20. ll.addView(tv1);
    21. ll.addView(tv2);
    22. ll.addView(tv3);
    23. setContentView(ll);
    24. }

    下面两张图片展示了这个布局在设备竖屏和横屏下的样子:

    竖屏

    横屏

    让我们更近一步地研究一下上面的Java代码。首先,创建并配置三个TextView控件。每个控件都有文本大小(字体大小),文本对齐,以及文本值本身。然后,创建一个垂直方向的线性布局。它的布局参数允许它填充整个父级对象(在这里就是整个屏幕),并且它的对齐导致所有子控件都排列在屏幕中间,而不是从左上角开始。每个TextView控件通过addView方法作为子控件添加到线性布局中。最后,当父级控件要在屏幕上显示时,线性布局被传到setContentView()方法中。

    如你所见,当越来越多的控件要添加到屏幕时,代码量会很快地增长。为了易组织和可维护性,用程序定义并使用布局最好是用在特殊情况而不是一般情况。


  3. 探讨线性布局的重要特性和属性

    现在让我们来看看有助于配置线性布局和它的子控件的一些重要属性。

    一些特别的属性应用到线性布局。你会使用到线性布局最重要的属性包括:

    ◆方向属性(必须),取值可以是vertical或horizontal(类:LinearLayout)

    ◆对齐属性(可选),控制子控件在线性布局中如何排列和显示(类:LinearLayout)

    ◆layout_weight属性(可选,应用到每个子控件)指定每个子控件在父级线性布局中的相对重要性(类:LinearLayout.LayoutParams)

    此外,通用的ViewGroup-style属性也应用到线性布局。这些属性包括:

    ◆通用布局参数如layout_height (必须)和layout_width (必须) (类:ViewGroup.LayoutParams)

    ◆边距布局参数如margin_top,margin_left,margin_right和margin_bottom (类:ViewGroup. MarginLayoutParams)

    ◆布局参数如layout_height和layout_width (类:ViewGroup.LayoutParams)

    给子控件赋权

    绝大部分线性布局的属性都是自明性的。然而layout_weight属性需要一些额外的讨论。与其它线性布局属性不同,其它属性应用在线性布局视图本身,而这个属性是应用在它的子控件上的。权值本身应该是一个数字(比如0.5,0.25,0.10,0.10,0.05),如果你把所有子控件的权值加起来等于1(100%)。

    子控件的权值控件它在父线性布局中有多“重要”或者留给其多少“空间”。这一点最好通过例子来说明。让我们回到我们前面用的彩虹线性布局。为了允许所有子控件相同地“拉伸”填充线性布局,不管屏幕的大小,我们使用layout_weight来对每个TextView赋予相对权值。因为有7种我们想赋相同权值的颜色,我们将1除以7大约得到0.143.然而,既然我们想要权值之和最后为1,因此5个控件权值设为0.14,另外两个为0.15——一个微小的区别使得总和刚刚好为1,但是这对于第一个和最后一个控件来说还是很明显的。

    当屏幕上有足够空间来正确的展示所有控件的时候,这个权值技巧很有效。那就是说,当空间很紧的时候,权值属性可能会被其它因素覆盖,比如视图裁剪或者在TextView下试图不环绕文本。当我们改变rainbow.xml布局文件以包含相似水平布局(layout_height 还是设置为 fill_parent)的时候,这变得很明显。

    下面的两张图片展示这个相同的布局(只是改变到水平方向)在设备竖屏和横屏模式下可能的样子:

    竖屏

    横屏

    我们期望的是红色和紫色区域(权值0.15)比其它颜色(权值为0.14)会略大一些,但是显示出来却不是这样。如果你仔细看红色TextView,它应该比它边上橙色的TextView占用更多空间。然而,因为“Red”是一个短单词,而“Orange”不是,因此系统自动的作了一些冲撞调整,为了使得每个单词不会折行。这样的结果更令人高兴,但是这可能会有一些烦恼,如果这不是想要的效果的话。


分享到:
评论

相关推荐

    Android用户界面设计:线性布局.pdf

    Android用户界面设计:线性布局.pdf

    Android用户界面设计:线性布局[定义].pdf

    Android用户界面设计:线性布局[定义].pdf

    Android用户界面设计:相对布局

    除了将控件显示在一行或一列的线性布局,相对布局也是Android用户界面设计使用得很普遍的布局类型。和其它布局很相似,相对布局可以通过XML布局资源来定义也可以用Java程序来定义。相对布局的功能就像它的名字表达的...

    AndroidUI基本测验:线性布局

    用这些包括线性布局控件的渐进测验来测试你的新知识,并且巩固你Java编程和Android用户界面设计与开发的知识。为了准备这个测验,你希望以一个基本的Android程序开始。你只需要在Eclipse中创建一个Android程序然后...

    Android线性布局代码案例

    线性布局(LinearLayout)是 Android 中最基本的布局之一,用于在界面上按照水平或垂直方向...通过合理地组织和设计线性布局,可以实现清晰、易读、美观的用户界面,并且在不同屏幕尺寸和设备方向下保持良好的适配性。

    Android UI设计心得

    包括线性布局(LinearLayout)、相对布局(RelativeLayout)、表格布局(TableLayout)、框架布局(FrameLayout)、绝对布局(AbsoluteLayout)。其中AbsoluteLayout在Android SDK2.3.3之后已经明确不再支持。 资源带...

    布局管理器案例集锦。• 线性布局 • 框架布局 • 表格布局 • 相对布局 • 网格布局

    • 为了让各种控件在不同的手机屏幕上都能运行良好,为了更好地管理Android应用的用户界面里的各种控件,Android提供了布局管理器。 • 使用布局管理器,可以根据运行平台来调整控件的大小,程序员要做的,就是选择...

    AndroidStdio LinearLayout 线性布局写一个登录界面_顾缘君兮的博客-CSDN博客.html

    AndroidStdio LinearLayout 线性布局写一个登录界面_顾缘君兮的博客-CSDN博客.html

    android开发——简易计算器的设计报告.doc

    (1)线性布局LinearLayout:垂直:android:orientation="vertical";水平:andro id:orientation="horizontal" (2)相对布局RelativeLayout:让子元素指定它们相对于其他元素的位置(通过ID 来指定)或相对于父布局...

    Android期末设计报告.docx

    2.2 界面设计 LinearLayout 线性布局/相对布局控件RelativeLayout。 控件的使用:button按钮控件/EditText文本框控件/imageView图片视图控件等。 3 功能需求 五子棋分为五个模块:开始游戏、游戏说明、最高纪录、...

    android开发揭秘PDF

    4.1 用户界面开发详解 4.1.1 用户界面简介 4.1.2 事件处理 4.2 常用控件应用 4.2.1 文本框(Textiew) 4.2.2 列表(ListView) 4.2.3 提示(T0ast) 4.2.4 编辑框(EditText) 4.2.5 单项选择(RadioGroup、RadioButton 4.2.6...

    Android简单购物项目.zip

    2.1购物界面:布局:采用线性布局嵌套,增加checkbox来进行用户对商品的选择。对各个所选的商品的个数设置最多11个。通过“+”、“-”按钮来选择商品的个数,然后点击复选框来选择。界面上每个商品下面都对应着商品的...

    编写微信界面(UI界面设计-移动平台开发技术-gddrxy

    1. Android有五大布局对象,它们分别是FrameLayout(框架布局:不知道是不是这么翻译的),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。 2. Android常用控件: 1...

    Android入门到精通源代码.

    6.2.2 线性布局(LinearLayout) 6.2.3 相对布局(RelativeLayout) 6.2.4 表格布局(TableLayout) 6.2.5 绝对布局(AbsoluteLayout) 6.3 界面中的字体 6.3.1 设置系统字体 6.3.2 引用用户自定义字体 6.4 应用实例...

    《Android应用开发揭秘》源码

     4.1 用户界面开发详解  4.1.1 用户界面简介  4.1.2 事件处理  4.2 常用控件应用  4.2.1 文本框(Textiew)  4.2.2 列表(ListView)  4.2.3 提示(T0ast)  4.2.4 编辑框(EditText)  4.2.5 单项选择(RadioGroup...

    Android-数独游戏实验报告.pdf

    该数独游戏是基于 Android 系统,通过过程性设计声明性两种方式来设 计用户界面,采用 Android 2D 绘图来实现数独的游戏界面中的九宫格和数字的 绘制,以及田填充页面的提示等。该数独游戏同时还涉及到活动的创建,...

Global site tag (gtag.js) - Google Analytics