什么是线性布局
线性布局是最简单,Android开发者使用得最多的布局类型之一,开发者用它来组织你们的用户界面上的控件。线性布局的作用就像它的名字一样:它将控件组织在一个垂直或水平的形式。当布局方向设置为垂直时,它里面的所有子控件被组织在同一列中;当布局方向设置为水平时,所有子控件被组织在一行中。
线性布局可以在XML布局资源文件中定义,也可以用Java代码在程序中动态的定义。
下图展示了一个包含7个TextView控件的线性布局。这个线性布局方向被设置为垂直,导致每个TextView控件被显示在一列当中。每一个TextView控件的文本属性都是一个颜色值,背景色就是这个颜色;通过将控件的layout_width属性设置为fill_parent,每个控件都拉伸到屏幕宽度。
用XML布局资源定义线性布局
设计程序用户界面最方便和可维护的方法是创建XML布局资源。这个方法极大地简化了UI设计过程,它将很多静态创建和用户界面控件的布局以及控件属性的定义移到了XML中,而不是写代码。
XML布局资源必须被存储在项目目录的/res/layout下。让我们看看前一节介绍的彩虹线性布局。这个屏幕基本上就是一个设置为铺满整个屏幕的垂直线性布局,这通过设置它的layout_width和layout_height属性为fill_parent来实现。适当地将其命名为/res/layout/rainbow.xml,XML定义如下:
- <?xmlversion="1.0"encoding="utf-8"?>
-
-
<LinearLayoutxmlns:android="http://schemas.android.com/apk/res/android"
-
-
android:layout_width="fill_parent"android:layout_height="fill_parent"
-
-
android:orientation="vertical">
-
-
<TextViewandroid:text="RED"android:id="@+id/TextView01"
-
-
android:layout_height="wrap_content"android:background="#f00"
-
-
android:layout_width="fill_parent"android:layout_weight=".14"
-
-
android:gravity="center"android:textColor="#000"></TextView>
-
-
<TextViewandroid:text="ORANGE"android:id="@+id/TextView02"
-
-
android:layout_height="wrap_content"android:layout_width="fill_parent"
-
-
android:layout_weight=".15"android:background="#ffa500"
-
-
android:gravity="center"android:textColor="#000"></TextView>
-
-
<TextViewandroid:text="YELLOW"android:id="@+id/TextView03"
-
-
android:layout_height="wrap_content"android:layout_width="fill_parent"
-
-
android:layout_weight=".14"android:background="#ffff00"
-
-
android:gravity="center"android:textColor="#000"></TextView>
-
-
<TextViewandroid:text="GREEN"android:id="@+id/TextView04"
-
-
android:layout_height="wrap_content"android:layout_width="fill_parent"
-
-
android:layout_weight=".15"android:background="#0f0"android:gravity="center"
-
-
android:textColor="#000"></TextView>
-
-
<TextViewandroid:text="BLUE"android:id="@+id/TextView05"
-
-
android:layout_height="wrap_content"android:layout_width="fill_parent"
-
-
android:layout_weight=".14"android:background="#00f"android:gravity="center"
-
-
android:textColor="#fff"></TextView>
-
-
<TextViewandroid:text="INDIGO"android:id="@+id/TextView06"
-
-
android:layout_height="wrap_content"android:layout_width="fill_parent"
-
-
android:layout_weight=".14"android:background="#4b0082"
-
-
android:gravity="center"android:textColor="#fff"></TextView>
-
-
<TextViewandroid:text="VIOLET"android:id="@+id/TextView07"
-
-
android:layout_height="wrap_content"android:layout_width="fill_parent"
-
-
android:layout_weight=".14"android:background="#ee82ee"
-
-
android:gravity="center"android:textColor="#000"></TextView>
-
-
</LinearLayout>
可能你会注意到这个线性布局的每一个子控件都有很多有趣的属性,包括一个叫做layout_weight的属性。一会我们会讲到更多关于它的内容。
下面两张图片展示了这个布局在设备的竖屏和横屏模式下的样子:
回忆一下,在Activity中,只需要一行有onCreate()方法的代码来在屏幕上加载和显示一个布局资源。如果这个布局资源被存储在/res/layout/rainbow.xml文件中,这行代码应该是:
- setContentView(R.layout.rainbow);
-
用程序动态定义线性布局
你也可以通过程序来创建和配置线性布局。这通过LinearLayout(android.widget.LinearLayout)类来实现。你能在LinearLayout.LayoutParams类中找到子级细节。同样地,典型的布局参数(android.view.ViewGroup.LayoutParams),如layout_height和layout_width, 以及边距参数(ViewGroup.MarginLayoutParams)也能用在LinearLayout对象上。
使用以前介绍过的setContentView()方法代替直接加载布局资源,你需要用Java创建屏幕内容,然后向setContentView()方法提供一个父级布局对象,这个对象包括了所有要作为它的子视图展示的控件内容。在这种情况下,你的父级布局对象是线性布局。
例如,下面的代码示例了如何用程序在Activity中实例化一个线性布局并在它的onCreate()方法中将三个TextView对象放入其中:
- publicvoidonCreate(BundlesavedInstanceState){
-
- super.onCreate(savedInstanceState);
-
- //setContentView(R.layout.rainbow);
-
-
TextViewtv1=newTextView(this);
-
- tv1.setText("FIRST");
-
- tv1.setTextSize(100);
-
- tv1.setGravity(Gravity.CENTER);
-
-
TextViewtv2=newTextView(this);
-
- tv2.setTextSize(100);
-
- tv2.setGravity(Gravity.CENTER);
-
- tv2.setText("MIDDLE");
-
-
TextViewtv3=newTextView(this);
-
- tv3.setTextSize(100);
-
- tv3.setGravity(Gravity.CENTER);
-
- tv3.setText("LAST");
-
-
LinearLayoutll=newLinearLayout(this);
-
- ll.setOrientation(LinearLayout.VERTICAL);
-
- ll.setLayoutParams(newLayoutParams(LayoutParams.FILL_PARENT,LayoutParams.FILL_PARENT));
-
- ll.setGravity(Gravity.CENTER);
-
- ll.addView(tv1);
-
- ll.addView(tv2);
-
- ll.addView(tv3);
-
- setContentView(ll);
-
- }
下面两张图片展示了这个布局在设备竖屏和横屏下的样子:
让我们更近一步地研究一下上面的Java代码。首先,创建并配置三个TextView控件。每个控件都有文本大小(字体大小),文本对齐,以及文本值本身。然后,创建一个垂直方向的线性布局。它的布局参数允许它填充整个父级对象(在这里就是整个屏幕),并且它的对齐导致所有子控件都排列在屏幕中间,而不是从左上角开始。每个TextView控件通过addView方法作为子控件添加到线性布局中。最后,当父级控件要在屏幕上显示时,线性布局被传到setContentView()方法中。
如你所见,当越来越多的控件要添加到屏幕时,代码量会很快地增长。为了易组织和可维护性,用程序定义并使用布局最好是用在特殊情况而不是一般情况。
-
探讨线性布局的重要特性和属性
现在让我们来看看有助于配置线性布局和它的子控件的一些重要属性。
一些特别的属性应用到线性布局。你会使用到线性布局最重要的属性包括:
◆方向属性(必须),取值可以是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 用户界面设计:线性布局 Android 用户界面设计中,线性布局是一个非常重要的概念。线性布局是一种基本的布局类型,通过它可以组织用户界面控件或者小工具在屏幕上垂直或水平地排列。使用得当,线性布局...
Android用户界面设计:线性布局[定义].pdf
除了将控件显示在一行或一列的线性布局,相对布局也是Android用户界面设计使用得很普遍的布局类型。和其它布局很相似,相对布局可以通过XML布局资源来定义也可以用Java程序来定义。相对布局的功能就像它的名字表达的...
用这些包括线性布局控件的渐进测验来测试你的新知识,并且巩固你Java编程和Android用户界面设计与开发的知识。为了准备这个测验,你希望以一个基本的Android程序开始。你只需要在Eclipse中创建一个Android程序然后...
这些示例涵盖了 Android 应用程序中常见的用户界面元素,如按钮、文本框、编辑框、单选按钮、多选框、菜单、对话框、图片视图、图片按钮等,以及不同的布局方式,如垂直线性布局、水平线性布局、相对布局和绝对布局...
线性布局(LinearLayout)是 Android 中最基本的布局之一,用于在界面上按照水平或垂直方向...通过合理地组织和设计线性布局,可以实现清晰、易读、美观的用户界面,并且在不同屏幕尺寸和设备方向下保持良好的适配性。
Android界面布局是Android应用程序的重要组成部分,决定了应用程序的外观和用户体验。在设计Android界面布局时,需要考虑到布局的美观性、易用性和性能。下面将详细介绍Android界面布局的设计实用教案。 首先,...
包括线性布局(LinearLayout)、相对布局(RelativeLayout)、表格布局(TableLayout)、框架布局(FrameLayout)、绝对布局(AbsoluteLayout)。其中AbsoluteLayout在Android SDK2.3.3之后已经明确不再支持。 资源带...
• 为了让各种控件在不同的手机屏幕上都能运行良好,为了更好地管理Android应用的用户界面里的各种控件,Android提供了布局管理器。 • 使用布局管理器,可以根据运行平台来调整控件的大小,程序员要做的,就是选择...
AndroidStdio LinearLayout 线性布局写一个登录界面_顾缘君兮的博客-CSDN博客.html
Android UI 用户界面开发是 Android 应用程序开发的重要组成部分,涉及到用户界面元素、布局实现、事件响应、应用软件代码目录结构等多个方面。下面将对这些方面进行详细的分析和说明。 一、用户界面元素 用户...
9. 用户界面原则 * 隐喻:隐喻是构建一个基于操作任务心智模型的模块,用它们来传递应用程序的概念和功能。 * 反映用户的心智模型:用户已经有了一个来描述你的程序正在进行的任务的心智模型。 * 直接操作:直接...
(1)线性布局LinearLayout:垂直:android:orientation="vertical";水平:andro id:orientation="horizontal" (2)相对布局RelativeLayout:让子元素指定它们相对于其他元素的位置(通过ID 来指定)或相对于父布局...
Android 布局种类是 Android 应用程序中不可或缺的一部分,它们决定了应用程序的用户界面和用户体验。Android 提供了多种布局种类,每种布局种类都有其特点和用途。在这篇文章中,我们将详细介绍 Android 中的五种...
* 熟练 Android UI 的五种常用布局:线性、表格、相对、绝对、帧布局 * 熟练使用 textoiview、editview、button、menu、checkbox、listview 等界面组件 * 熟练 SqLite、File、SharePreference 和网络存储 * 熟练 ...
2.2 界面设计 LinearLayout 线性布局/相对布局控件RelativeLayout。 控件的使用:button按钮控件/EditText文本框控件/imageView图片视图控件等。 3 功能需求 五子棋分为五个模块:开始游戏、游戏说明、最高纪录、...
Android 提供的线性布局(LinearLayout)、表格布局(TableLayout)、绝对布局(Absolute Layout)相对来说都有繁琐,故采取相对布局方式。 布局文件 布局文件是软件设计的重要组成部分,需要在开始设计软件之前...
* LinearLayout:线性布局,每一个 LinearLayout 里面又可分为垂直布局(android:orientation="vertical")和水平布局(android:orientation="horizontal") * AbsoluteLayout:绝对布局用 X,Y 坐标来指定元素的位置...