天天看点

android 应用界面布局,Android应用界面编程--布局管理器

简介

在介绍Android的布局管理器之前,有必要让了解Android平台下的控件类。首先要了解的是View类,该类为所有可视化控件的基类,主要提供了控件绘制和事件处理的方法。创建用户界面所使用的控件都继承自View,如TextView、Button、CheckBox等。

关于View及其子类的相关属性,既可以在布局XML文件中进行设置,也可以通过成员方法在代码中动态设置。View类常用的属性及其对应方法如表1所示。

表1 View类常用属性及对应方法说明

android 应用界面布局,Android应用界面编程--布局管理器

说明:任何继承自View的子类都将拥有View类的以上属性及对应方法。

android:layout_gravity:是用于指定控件在布局中的对齐 方 式 。 android:layout_gravity 的 可 选 值 和 android:gravity 差 不 多 , 但 是 需 要 注 意 , 当 LinearLayout 的排列方向是 horizontal 时,只有垂直方向上的对齐方式才会生效,因为此时水 平方向上的长度是不固定的,每添加一个控件,水平方向上的长度都会改变,因而无法指定 该方向上的对齐方式。同样的道理,当 LinearLayout 的排列方向是 vertical 时,只有水平方 向上的对齐方式才会生效。

android:layout_weight:指定该子组件的布局宽度度。

这个属性允许我们使用比例的方式来指定控件的大小。形容的是本view和父容器的关系;而view中的width是用来描述自己本身的。用来分配空间大小。

android:layout_height:指定该子组件的高度。

相对布局(RelativeLayout)

顾名思义是有参照的,就是以某个兄弟组件,或者父容器来决定的(兄弟组件是在一个同一个布局里面的组件,如果是布局里一个组件参照另一个布局里的组件会出错)。合理地利用好LinearLayout的weight权重属性和RelativeLayout相 对布局,可以解决屏幕分辨率不同的自适应问题。

在相对布局中,子控件的位置是相对兄弟控件或父容器而决定的。出于性能考虑,在设计相对布局时要按照控件之间的依赖关系排列,如View A的位置相对于View B来决定,则需要保证在布局文件中View B在View A的前面。

在进行相对布局时用到的属性很多,首先来看属性值只为true或false的属性,如表2所示。

表2 相对布局中只取true或false的属性

android 应用界面布局,Android应用界面编程--布局管理器

接下来再来看属性值为其他控件id的属性,如表3所示。

表3 相对布局中取值为其他控件id的属性及说明

android 应用界面布局,Android应用界面编程--布局管理器

最后要介绍的是属性值以像素为单位的属性及说明,如表4所示。

表4 相对布局中取值为像素的属性及说明

android 应用界面布局,Android应用界面编程--布局管理器

需要注意的是在进行相对布局时要避免出现循环依赖,例如设置相对布局在父容器中的排列方式为WRAP_CONTENT,就不能再将相对布局的子控件设置为ALIGN_PARENT_ BOTTOM。因为这样会造成子控件和父控件相互依赖和参照的错误。

线性布局(LinearLayout)

提供了控件水平或者垂直排列的模型。同时,使用此布局时可以通过设置控件的weight参数控制各个控件在容器中的相对大小。LinearLayout布局的属性既可以在布局文件(XML)中设置,也可以通过成员方法进行设置。表5给出了LinearLayout常用的属性及这些属性的对应设置方法。

表5 LinearLayout常用属性及对应设置方法

android 应用界面布局,Android应用界面编程--布局管理器

在线性布局中可使用gravity属性来设置控件的对齐方式,gravity可取的属性值及说明如表6所示。

提示:当需要为gravity设置多个值时,用“|”分隔即可。

表6 gravity可取的属性值及说明

android 应用界面布局,Android应用界面编程--布局管理器

表格布局(TableLayout)

以行和列的形式管理控件,每行为一个TableRow对象,也可以为一个View对象,当为View对象时,该View对象将跨越该行的所有列。在TableRow中可以添加子控件,每添加一个子控件为一列。

TableLayout继承自LinearLayout类,除了继承来自父类的属性和方法, TableLayout类中还包含表格布局所特有的属性和方法。这些属性和方法说明如表7所示。

表7 TableLayout类常用属性及对应方法说明

android 应用界面布局,Android应用界面编程--布局管理器

说明:setShrinkAllColumns和setStretchAllColumns实现的功能是将表格中的所有列设置为Shrinkable或Stretchable。

帧布局(FrameLayout)

FrameLayout帧布局在屏幕上开辟出了一块区域,在这块区域中可以添加多个子控件,但是所有的子控件都被对齐到屏幕的左上角。帧布局的大小由子控件中尺寸最大的那个子控件来决定。如果子控件一样大,同一时刻只能看到最上面的子控件。

FrameLayout继承自ViewGroup,除了继承自父类的属性和方法,FrameLayout类中包含了自己特有的属性和方法,如表8所示。

表8 FrameLayout属性及对应方法

android 应用界面布局,Android应用界面编程--布局管理器

提示:在FrameLayout中,子控件是通过栈来绘制的,所以后添加的子控件会被绘制在上层。

绝对布局

绝对定位AbsoluteLayout,又可以叫做坐标布局,可以直接指定子元素的绝对位置,这种布局简单直接,直观性强,但是由于手机屏幕尺寸差别比较大,使用绝对定位的适应性会比较差。

简单的一个布局

android 应用界面布局,Android应用界面编程--布局管理器

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

xmlns:tools="http://schemas.android.com/tools"

xmlns:app="http://schemas.android.com/apk/res-auto"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:orientation="vertical"

tools:context="cn.com.buildwin.activities.PreviewActivity">

android:layout_width="match_parent"

android:layout_height="match_parent">

android:id="@+id/video_view"

android:layout_width="match_parent"

android:layout_height="match_parent"

android:background="#000000"

android:layout_gravity="center" />

android:id="@+id/progressBar"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"/>

android:layout_width="match_parent"

android:layout_height="wrap_content"

android:layout_alignParentBottom="true">

android:id="@+id/take_picture_button"

android:layout_width="0dp"

android:layout_height="wrap_content"

android:layout_weight="1"

android:text="拍照"/>

举报/反馈