您的位置:首页 > 移动开发 > Android开发

浅谈Android中常用的五种布局方式

2016-09-19 21:17 225 查看
本篇文章所提到的控件指:控件和布局

布局的继承关系:LinearLayout,RelativeLayout,FrameLayout,AbsoluteLayout都是ViewGroup的子类,所以有些属性可以有交集,应具体对待。

而TableLayout是LinearLayout的子类,因此大多数LinearLayout的属性都可以用。

子类拥有父类的属性。

一、LinearLayout(orientation)

线性布局是按照水平或垂直的顺序将子元素(可以是控件或布局)依次按照顺序排列,每一个元素都位于前面一个元素之后,即控件在xml中所写的先后循序就是显示时控件的顺序。

线性布局及子类特有的属性:

权重:剩余屏幕占有的比例

一般情况:在那个方向上设权重,则将该方向的属性(height或者width)设置为0dp

如果在该方向设wrap_content:权重值越大,占得屏幕比例越多,但小不warp_contant

如果设match_parent:权重值越大,占得屏幕比例越小,但大大不过match_parent

缺点:缺乏灵活性,不能任意指定位置。不过掌握好权重能弥补很多线性布局的缺点。

不适用场景:两个空间之间有很大空隙的布局,虽然有layout_marginTop等类似属性,却不好控制具体位置,而且用layout_marginTop达到目的,也只是在特定分辨率手机上适配,不能很好适配其他分辨率。

二、RelativeLayout

按照子元素之间的相对位置关系完成布局的,作为Android系统五大布局中最灵活也是最常用的一种布局方式。

值得注意的是:相对布局的参照控件必须在被参照控件的后面,在编写xml布局文件时注意。

相对布局特有的属性:值是某个控件和布局的id

android:layout_below 在某控件的下方

android:layout_above 在某控件的的上方

android:layout_toLeftOf 在某控件的左边

android:layout_toRightOf 在某控件的右边

android:layout_alignTop 本控件的上边缘和某控件的的上边缘对齐

android:layout_alignLeft 本控件的左边缘和某控件的的左边缘对齐

android:layout_alignBottom 本控件的下边缘和某控件的的下边缘对齐

android:layout_alignRight 本控件的右边缘和某控件的的右边缘对齐

相对布局刚好填补了线性布局的缺点,但是相对布局也并非没有缺点。

缺点:每个空间都必须设置id,使用繁琐,如果修改了某一个控件则可能需要重新布局,操作不易。

注:某一个控件可能同时依赖于多个控件,一个控件同时可能被多个控件依赖。并非单一依赖。

三、FrameLayout:

所有东西依次都放在左上角,会重叠,这个布局比较简单,也只能放一点比较简单的东西。

特点:后添加进去的控件将从左上角覆盖先放进去的控件

适用场景:在开发中常做容器使用,用于动态添加布局对象。

四、AbsoluteLayout:

这种布局方式也比较简单,但是在屏幕旋转时,往往会出问题,而且多个元素的时候,计算比较麻烦。

绝对布局中将所有的子元素通过设置android:layout_x 和 android:layout_y属性,将子元素的坐标位置固定下来,即坐标(android:layout_x, android:layout_y) ,layout_x用来表示横坐标,layout_y用来表示纵坐标。 屏幕左上角为坐标(0,0),横向往右为正方,纵向往下为正方。实际应用中,这种布局用的比较少,因为Android终端一般机型比较多,各自的屏幕大小。分辨率等可能都不一样,如果用绝对布局,可能导致在有的终端上显示不全等

值得注意:该布局的原点在左上角。

缺点:屏幕适配麻烦,容易出问题,在实际开发中不常用。

五、TableLayout:

表格布局,适用于多行多列的布局格式,每个TableLayout是由多个TableRow组成,一个TableRow就表示TableLayout中的每一行,这一行可以由多个子元素组成。实际上TableLayout和TableRow都是LineLayout线性布局的子类。但是TableRow的参数android:orientation属性值固定为horizontal,且android:layout_width=MATCH_PARENT,android:layout_height=WRAP_CONTENT。所以TableRow实际是一个横向的线性布局,且所以子元素宽度和高度一致。

值得注意的是:列和行下标是从0开始的

特殊属性:collapseColumns:隐藏列,多个列之间逗号隔开

            StretchColumns:设置某个列是可伸展的。

            shrinkColumns :可收缩的

一下两属性不能自动提示,不知为何,个人觉得不建议使用该属性。

android:layout_colum:设置控件在具体的列

android:layout_span:设置控件所跨越的列数。

 

使用场景:特别规范的展示数据或者选项区,除了特殊场景外,开发中一般不使用。

缺点:过于规范,不够灵活,不能设计出不规则的界面

总结:每一个布局都有自己适合的方式,这五个布局元素可以相互嵌套应用,做出美观的界面。每一个布局都有自己的使用场合,就像每个人一样在生活中扮演者重要角色,或多或少都有作用。

注意:有些界面虽然某个布局能单独完成,但是推荐使用布局嵌套。而且根布局推荐使用相对布局。

最常用的布局:FrameLayout做容器,而RelativeLayout和LinearLayout嵌套做布局。市面上的:三层式界面都是基于这样做的,最上面是标题栏,中间是动态加载的布局对象,最下面是RadioGroup。父容器是FrameLayout。

学习建议:根据java的继承关系去学习,从而形成知识框架。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息