Android布局管理器浅析

在Android应用开发中,为了更好地管理Android应用的用户界面里的各组件,Android提供了布局管理器来实现Android应用的图形用户界面平台无关性,其中所有布局管理器的父类为ViewGroup。一般来说,推荐使用布局管理器来管理组件的分布、大小,而不是直接设置组件位置和大小。在开发当中,最常用的方法是预先设置好容器边距(分布)、大小,然后其包含的组件使用"fill_match"或"wrap_content"自动适应父容器即可。

一、LinearLayout线性布局

LinearLayout布局管理器,即控制个组件横向/纵向排列(android:orientation属性控制)。需要注意的是,Android的线性布局不会换行,当组件一个挨着一个地排到头之后,剩下的组件将不会被显示出来。LinearLayout支持的常用XML属性。

(1)android:baselineAligned:该属性设置为false,将会阻止该布局管理器与它的子元素的基线对齐;

(2)android:divider:用于设置垂直布局时两个按钮之间的分隔条;

(3)android:gravity:用于设置LinearLayout(容器)所包含的所有子元素的对齐方式,如left|center_vertical代表所有子元素出现在屏幕左边,而且垂直居中。需要注意的是,一般容器才支持指定该属性;

(4)android:orientation:设置布局管理器内组件的排列方式,如vertical为垂直排列(默认值);

(5)android:measureWithLargestChild:当该属性设为true时,所有带权重的子元素都会具有最大元素的最小尺寸;

(6)android:layout_gravity:指定该子元素在LinearLayout(父容器)中的对齐方式(某个子元素相对于LinearLayout容器而言);

(7)android:layout_weight:指定该子元素在LinearLayout中所占的权重;

理解:LinearLayout布局管理器支持指定所包含控件(widgets)或容器(containers)的填充权值,通过该属性实现填充屏幕上的剩余空间。避免了在一个大屏幕中,一串widgets或者是containers挤成一堆的情况,而是允许他们放大填充空白,剩余的空间会按这些widgets或者是containers指定的权值比例分配屏幕。默认的
weight 值为0,表示按照widgets或者是containers实际大小来显示,若高于0的值,则将Container剩余可用空间分割,分割大小具体取决于每一个widget或者是container的layout_weight及该权值在所有widgets或者是containers中的比例。如有两个文本,权值分别为2和1,那么剩余空间的2/3给权值为2的,1/3大小给权值为1的。

二、TableLayout表格布局

TableLayout表格布局管理器继承于LinearLayout,其本质依然是线性布局管理器。表格布局采用行、列的形式来管理UI组件,TableLayout主要通过添加TableRow、其他主键来控制表格的行数和列数。即每次向TableLayout中添加一个TableRow(也为容器),就表示添加一行;向每个TableRow中添加其他子组件该表格就增加一列。

注意:在表格布局中,列的宽度由该列中最宽的那个单元格决定,整个表格布局的宽度则取决于父容器的宽度(默认沾满父容器)。TableLayout支持的常用XML属性如下:

(1)支持LinearLayout所有属性;

(2)android:collapseColumns:如果某个列或多个被设为Collapsed,该列的所有单元格被隐藏;

(3)android:shrinkColumns:如果某个列或多个列设为Shrinkable,该列的所有单元格的宽度可以被收缩,以保证该表格能适应父容器的宽度;

(4)android:stretchColumns:如果某个列或多个列设为Strtchable,该列的所有单元格的宽度可以被拉伸,以保证组件能完全填满表格剩余空间。

实例如下:定义一个表格布局,指定第1列和第2列可以被拉伸,第3列可以被隐藏

<TableLayout

android:id="+id/tableLayout01"

android:layout_width="fill_parent"

android:layout_height="wrap_content"

android:stretchColumns="1,2"

android:collapseColumns="3">

<TableRow ....../>

<TableRow ....../>

</TableLayout>

三、FrameLayout帧布局

FrameLayout帧布局继承于ViewGroup组件,帧布局容器为每个加入其中的组件创建一个空白的区域(即为一帧)。每个子组件占据一帧,这些帧都会根据gravity属性执行自动对齐,帧布局的效果即把组件一个一个地叠加在一起。FrameLayout支持的常用XML属性如下:

(1)android:gravity:设置容器中所有子组件的对齐方式;

(2)android:layout_gravity:设置某个子组件相对于容器中的对齐方式;

(3)android:foreground:设置该帧布局容器的前景图像;

(4)android:foregroundGravity:定义绘制前景图像的gravity属性;

举例:

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

android:layout_width="match_parent"

android:layout_height="match_parent" >

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:background="#f0f"

android:height="300dp"

android:width="300dp" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:background="#f00"

android:height="250dp"

android:width="250dp" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:background="#ff0"

android:height="200dp"

android:width="200dp" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:background="#aaa"

android:height="150dp"

android:width="150dp" />

<TextView

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:layout_gravity="center"

android:background="#fc0"

android:height="100dp"

android:width="100dp" />

</FrameLayout>

显示效果:

注:android:width 定义控件上面的文本(TextView) 的宽度,需要与 android:layout_width 配合起来作用的,如果 android:layout_width="fill_parent" 的话,那么设置 android:width
是没有意义的。

四、RelativeLayout相对布局

RelativeLayout表示相对布局,相对布局管理器内子组件的位置总是相对兄弟组件、父容器来决定,每个组件或容器事先需指定android:id属性。RelativeLayout相对布局支持的常用XML属性如下:

(1)android:gravity:设置该布局容器各子组件的对齐方式(整体相对于父容器);

(2)android:ignoreGravity:设置哪个组件不受gravity属性的影响;

(3)android:layout_centerHorizontal:控制该子组件是否位于布局容器的水平居中;

(4)android:layout_centerVertical:控制该子组件是否位于布局容器的垂直居中;

(5)android:layout_centerInParent:控制该子组件是否位于布局容器的中央位置;

(6)android:layout_alignParentButtom:控制该子组件是否位于布局容器的低端对齐;

(7)android:layout_alignParentLeft:控制该子组件是否位于布局容器的左边对齐;

(8)android:layout_alignParentRight:控制该子组件是否位于布局容器的右边对齐;

(9)android:layout_alignParentTop:控制该子组件是否位于布局容器的顶端对齐;

(10)android:layout_toRightOf:控制该子组件位于给出ID组件的右侧;

(11)android:layout_toLeftOf:控制该子组件位于给出ID组件的左侧;

(12)android:layout_above:控制该子组件位于给出ID组件的上方;

(13)android:layout_below:控制该子组件位于给出ID组件的下方;

(14)android:layout_alignTop:控制该子组件位于给出ID组件的上边界对齐;

(15)android:layout_alignBottom:控制该子组件位于给出ID组件的下边界对齐;

(16)android:layout_alignLeft:控制该子组件位于给出ID组件的左边界对齐;

(17)android:layout_alignRight:控制该子组件位于给出ID组件的右边界对齐;

五、GridLayout网格布局

GridLayout网格布局是Android 4.0新增的布局管理器,只能在Android 4.0及以后的版本使用。GridLayout类似于HTML中的table标签,它把整个容器划分成为"行*列"个网格,每个网格可以放置一个组件,另外,也可以设置一个组件横跨多个列和多个行。GridLayout相对布局支持的常用XML属性如下:

(1)android:alignmentMode:设置该布局管理器采用的对齐模式;

(2)android:columnCount:设置该网格的列数量;

(3)android:clolumnOrderPreserved:设置该网格容器是否保留列序列号;

(4)android:rowCount:设置该网格的行数量;

(5)android:rowOrderPreserved:设置该网格容器是否保留行序列号;

(6)android:useDefaultMargins:设置该布局管理器是否使用默认的页边距

(7)android:layout_column:设置该子组件在GridLayout的第几列

(8)android:layout_columnSpan:设置该子组件在GridLayout横向上跨几行列

(9)android:layout_row:设置该子组件在GridLayout的第几行

(10)android:layout_rowSpan:设置该子组件在GridLayout纵向上跨几行

(11)android:layout_gravity:设置该子组件采用何种方式占据该网格的空间(相对于单个网格而言)

六、Android中常用的距离单位

1.px:像素,即每个px对应屏幕上的一个店。

2.dip/dp:设备独立像素。即一种基于屏幕密度的抽象单位,在每英寸160点的显示器上,1dip=1px,用于设置组件大小或距离。随着屏幕密度的改变,dip与px的换算会发生改变。

3.sp(scaled pixels,比例像素):主要处理字体的大小,可以根据用户的字体大小首选项进行缩放;

4.in:英寸,标准的长度单位;

5.pt:磅,1/72英寸

时间: 2024-10-14 15:12:34

Android布局管理器浅析的相关文章

Android布局管理器-使用LinearLayout实现简单的登录窗口布局

场景 Android布局管理器-从实例入手学习相对布局管理器的使用: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103838924 线性布局LinearLayout,分为水平和垂直线性布局. 实现效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 将activity修改为LinearLayout

Android布局管理器(线性布局)

线性布局有LinearLayout类来代表,Android的线性布局和Swing的Box有点相似(他们都会将容器里面的组件一个接一个的排列起来),LinearLayout中,使用android:orientation属性控制布局是水平还是竖直布局(vertical水平,horizontal竖直) XML属性 相关方法 说明 android:baselineAligned setBaselineAligned(boolean) 该属性设置为false,将会阻止该布局管理器与它的子元素的基线对其 a

Android布局管理器(表格布局)

表格布局有TableLayout所代表,TableLayout继承了LinearLayout,因此他的本质依然是LinearLayout. 表格布局采用行.列的形式来进行管理,在使用的时候不需要声明多少行.多少列,而是通过添加TableRow.其他组件来控制表格的行数和列数. 每次向TableLayout添加一个TableRow,该TableRow就是一个表格行,同时TableRow也是容器,可以在其中不断的添加其他的组件,每添加一个子组件,该表格的列就增加一列 在表格布局管理器中,可以为单元格

Android第二节(view简介以及Android布局管理器),维维复习

布局管理器是指定View之间的排列方式的.view就是UI控件,下节课我会整理到,这里我们先讲布局,大布局在我看来就相当于一个房间,让view显示,就是说物品在房间的摆放规则. 一.View的简介 View ,一般都有TextView,EditText,Button,RadioButton,CheckBox,ImageView,ImageButton. ViewGroup,一般有LinearLayout,RelativeLayout,FrameLayout,Spinner,ListView,Gr

Android布局管理器(贞布局)

贞布局有FrameLayout所代表,它直接继承了ViewGroup组建 贞布局为每个加入其中的组件创建一个空白区域(一帧),所以每个子组件占用一帧,这些贞都会根据gravity属性执行自动对齐 贞布局在游戏开发中使用较多 Xml属性 相关方法 说明 Android:foreground setForeground 设置该贞的前景图形 Android:foregroundGravity SetForegroundGavity 定义绘制前景图形的gravity属性 布局代码: <FrameLayo

Android布局管理器-从实例入手学习相对布局管理器的使用

场景 AndroidStudio跑起来第一个App时新手遇到的那些坑: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/103797243 使用相对布局RelativeLayout实现简单的登录提示的布局,效果如下 注: 博客: https://blog.csdn.net/badao_liumang_qizhi 关注公众号 霸道的程序猿 获取编程相关电子书.教程推送与免费下载. 实现 新建之后的默认页面布局为 将其修改为Rela

android的布局管理器

理论上通过setContentView(view)能够把一个view设置到activity中,但当你有很多个view控件的时候,就需要用android的布局管理器来管理view控件了. android布局管理器有以下几种: 1.线性布局 LinearLayout 2.框架布局 FrameLayout 3.表格布局 TableLayout 4.相对布局 RelativeLayout 5.绝对布局 AbsoluteLayout 一.LinearLayout 线性布局管理器 线性布局分为水平布局和垂直

android v7兼容包RecyclerView的使用(三)——布局管理器的使用

前两篇文章 android v7兼容包RecyclerView的使用(二) android v7兼容包RecyclerView的使用(一) 介绍了RecyclerView的基本用法以及与它相关的重要的几个类,本篇文章介绍布局管理器的具体用法. 为了演示布局管理器的使用,找了很多个例子,都没有找到感觉合适的例子,后来google了一把,发现了一个比较适合说明问题的例子.所以就拿该例子来解释吧. 在演示布局管理器前,我们先把UI部分搭建完成.由于使用到了V7兼容包的另一个包CardView,所以在这

Android【布局管理器语法】之四大布局【LinearLayout,TableLayout,FrameLayout,RelativeLayout】

LinearLayout 线性布局是将放入其中的组件按照垂直(vertical)或者水平(horizontal)方向来布局, 也就是控制其中组件横向排列或者纵向排列.在线性布局中 每一行[针对垂直排列]或每一列[针对水平排列]只能放一个组件 . 注意:Android线性布局不会换行,当组件一个挨着一个排列到窗体边缘后 剩下的组件将不会显示出来 排列方式由android:orientation属性控制,对齐方式由android:gravity属性来控制 (1)常见属性: android:orien