android布局学习

1、LinearLayout
线性布局和html中的css布局理念类似,但是具体实现却大不相同,css布局类似感性布局,设计完成布局后,头脑里面很难物化。而android的线性布局则属于理性布局,可以在头脑里面物化布局。线性布局没有块级元素和行内元素的区分,如果设置android:layout_width="match_parent"会占用父元素剩余宽度,其实"match_parent"就很贴切。在css里面,块级元素会自动新占一行,相当于width=“parent”,跟"match_parent"还是有区别的。当线性布局设置 android:layout_width=“wrap_content”,此时就相当于css里面的行内元素。父元素可以控制子元素的显示方式,而且当子元素的值与父元素的值相冲突时,已父元素的值为准。例如:设置父元素的android:orientation=“vertical”,这样所有都子元素都会占一行。这一点在css中是没有的,css中每个元素只负责自己就可以了。线性布局中的android:layout_weight就相当于css中的百分比,但比css布局更灵活,android:layout_weight是把父元素的剩余值按权重比例分配,当把子元素都值都设置为零时,就是css中的百分比布局。线性布局更加严谨、灵活甚至更好理解,子元素不能逾越父元素制定的规矩,这样整体感觉可控。而css布局比较自由,例如:float属性则要指定一个明确的宽度,否则,它们会尽可能地窄,这是一种约定,而LinearLayout中则必须设置父元素的android:orientation=“horizontal”,然后把子元素的属性设置为wrap_content,所以说LinearLayout的布局逻辑可以在头脑里面物化。
2、RelativeLayout
相对布局可以让子控件相对于兄弟控件或父控件进行布局,可以设置子控件相对于兄弟控件或父控件进行上下左右对齐。
RelativeLayout能替换一些嵌套视图,当我们用LinearLayout来实现一个简单的布局但又使用了过多的嵌套时,就可以考虑使用RelativeLayout重新布局。相对布局就是一定要加Id才能管理。在css中完全没有相对布局的概念,即使是position:relative;也只是相对于自己原有位置进行偏移。
RelativeLayout中子控件常用属性:
a、相对于父控件,例如:android:layout_alignParentTop=“true”
android:layout_alignParentTop 控件的顶部与父控件的顶部对齐;
android:layout_alignParentBottom 控件的底部与父控件的底部对齐;
android:layout_alignParentLeft 控件的左部与父控件的左部对齐;
android:layout_alignParentRight 控件的右部与父控件的右部对齐;

b、相对给定Id控件,例如:android:layout_above=“@id/**”
android:layout_above 控件的底部置于给定ID的控件之上;
android:layout_below 控件的底部置于给定ID的控件之下;
android:layout_toLeftOf 控件的右边缘与给定ID的控件左边缘对齐;
android:layout_toRightOf 控件的左边缘与给定ID的控件右边缘对齐;
android:layout_alignBaseline 控件的baseline与给定ID的baseline对齐;
android:layout_alignTop 控件的顶部边缘与给定ID的顶部边缘对齐;
android:layout_alignBottom 控件的底部边缘与给定ID的底部边缘对齐;
android:layout_alignLeft 控件的左边缘与给定ID的左边缘对齐;
android:layout_alignRight 控件的右边缘与给定ID的右边缘对齐;

c、居中,例如:android:layout_centerInParent=“true”
android:layout_centerHorizontal 水平居中;
android:layout_centerVertical 垂直居中;
android:layout_centerInParent 父控件的中央;
3、FrameLayout
帧布局或叫层布局,从屏幕左上角按照层次堆叠方式布局,后面的控件覆盖前面的控件。
该布局在开发中设计地图经常用到,因为是按层次方式布局,我们需要实现层面显示的样式时就可以
采用这种布局方式,比如我们要实现一个类似百度地图的布局,我们移动的标志是在一个图层的上面。
在普通功能的软件设计中用得也不多。层布局主要应用就是地图方面。在css中于之相关的属性是z-index。
4、AbsoluteLayout
绝对布局中将所有的子元素通过设置android:layout_x 和 android:layout_y属性,将子元素的坐标位置固定下来,即坐标(android:layout_x, android:layout_y) ,layout_x用来表示横坐标,layout_y用来表示纵坐标。屏幕左上角为坐标(0,0),横向往右为正方,纵向往下为正方。实际应用中,这种布局用的比较少,因为Android终端一般机型比较多,各自的屏幕大小。分辨率等可能都不一样,如果用绝对布局,可能导致在有的终端上显示不全等。所以这种方式已经被弃用。而css中的position绝对定位absolute是相对于设置了position:relative的父元素,在android布局中已经被整合到了相对布局的android:layout_alignParent中。绝对布局是一种经典的传统布局模式,以前的应用程序都是采用这种模式,之所以这种模式在布局中有一席之地,主要还是传承和过渡吧。
5、TableLayout
表格布局,适用于多行多列的布局格式,每个TableLayout是由多个TableRow组成,一个TableRow就表示TableLayout中的每一行,这一行可以由多个子元素组成。实际上TableLayout和TableRow都是LineLayout线性布局的子类。但是TableRow的参数android:orientation属性值固定为horizontal,且android:layout_width=MATCH_PARENT,android:layout_height=WRAP_CONTENT。所以TableRow实际是一个横向的线性布局,且所以子元素宽度和高度一致。在css中也有表格布局,而且理念基本相同,但android的表格布局只是理念继承,实现完全是从LinearLayout继承,对于有些不规范布局,例如:没有TableRow,也没什么奇怪的,把它看做LinearLayout就一切好理解了。
6、GridLayout
网格布局是Android4.0引入的网格布局,是TableLayout的一种演化,使用它可以减少布局嵌套。
常用属性:
排列对齐:
①设置组件的排列方式: android:orientation="" vertical(竖直,默认)或者horizontal(水平)
②设置组件的对齐方式: android:layout_gravity="" center,left,right,buttom

设置布局为几行几列:
①设置有多少行: android:rowCount=“4” //设置网格布局有4行
②设置有多少列: android:columnCount=“4” //设置网格布局有4列

设置某个组件位于几行几列
注:都是从0开始算的哦!
①组件在第几行: android:layout_row = “1” //设置组件位于第二行
②组件在第几列: android:layout_column = “2” //设置该组件位于第三列

设置某个组件横跨几行几列:
①横跨几行: android:layout_rowSpan = “2” //纵向横跨2行
②横跨几列: android:layout_columnSpan = “3” //横向横跨2列
7、ConstraintLayout
约束布局,也称作 增强型的相对布局,由 2016 年 Google I/O 推出。扁平式的布局方式,无任何嵌套,减少布局的层级,优化渲染性能。从支持力度而言,将成为主流布局样式,完全代替其他布局。

你可能感兴趣的:(android布局学习)