五大布局
1:线性布局
线性布局 LinearLayout本身常用到的两个属性 orientation = "vertical" ——该属性决定它的子类控件的排布方式(vertical:垂直; horizontal: 水平) android:gravity = "center" ——该属性决定了他子类的xy的位置 常用到的几个属性值 1>center_vertical:垂直(Y轴) 居中 2>center_horizontal:水平(X轴)居中 3>center:水平垂直都居中 4>right:子控件位于当前布局的右边 5>left:子控件位于当前布局的左边 6>bottom:子控件位于当前布局的下面 7>子类空间在LinearLayout常用到的属性还有layout_weight 比如android:layout_weight = "1", 指的是本身控件所占当前的父容器的一个比例 这里的gravity是指它的子类控件的性质 而子类空间的layout_gravity指的是子类控件本身的gravity android:layout_weight = "1" 指本身控件占当前父容器的比例 android:layout_gravity = "bottom" ——指本身在当前父类容器的XY的一个位置 区分gravity和layout_gravity的位置 layout_gravity是决定子类本身的一个位置 而gravity是决定子类的一个位置
2:相对布局
RelativelLayout是指相对布局控件, 表示当前控件相对于父类容器的位置的: 它包含的子控件将以控件之间的相对位置或者子类控件相对弗雷容器的位置的方式排列 android:layout_alignParentLeft = "true" 子类空间相对当前父类容器靠左边 android:layout_alignParentTop = "true" 子类控件相对弗雷容器靠上边 当然也有layout_alignParentRight/Bottom android:layout_marginLeft = "41dp" 子类控件相对父类容器左边的距离 android:layout_marginTop = "33dp" 子类控件距离父类容器上边的距离 也有Bottom/Right 如果距离四边距离相同,那就是: android:layout_margin = "40dp" android:layout_centerInParent = "true" 子类空间相对父类容器水平居中 android:layout_centerVertical = "true" 子类控件相对父类容器垂直居中 子类控件相对于子类控件的位置: android:layout_below = "@+id/button1" 该控件位于给定id控件的底部 android:layout_above = "+id/button1" 该控件位于给定id控件的上面 android:layout_toRightOf = "@+id/button1" 该控件位于给定id控件的右边 android:layout_toLeftOf= "@+id/button1" 该控件位于给定id控件的上面 android:layout_alignBaseline = "@+id/button1" 该控件的内容与给定id控件的内容在一条线上!!! 在一条线上 android:layout_alignBottom 该控件的底部边缘与给定id的控件的底部边缘对齐 android:layout_alignLeft 该控件的左边缘与给定id的控件的左边缘对齐 android:layout_alignRight 该控件的右边缘与给定id控件的右边缘对齐 android: layout_alignTop 该控件的顶部边缘与给定id控件的顶部对齐 @+id是在R.java中添加id,@id表示引用现有id toLeftOf是在左边,toRightOf是在右边 相对布局中的子布局设置layout_centerInParent与线性布局中子布局设置 android:layout_gravity="center_vertical|center_horizontal类似
3:帧布局
FrameLayout
在这个布局中,所有的子元素都不能被指定放置的位置,它们统统放于这块区域的左上角,并且后面的子元素直接覆盖在前面的子元素上,将前面的子元素部分全部遮挡
例如有四种不同颜色的textview控件,实现了这种效果
帧布局中:设置前景图使用android:foreground
使用android:keepScreenOn保持屏幕唤醒
设置前景图的位置使用android:foregroundGravity
例如下面代码:
<?xml version="1.0" encoding="utf-8"?> <FrameLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" > <TextView android:layout_gravity="center" android:id="@+id/textView1" android:background="#564238" android:layout_width="200dp" android:layout_height="200dp" android:text="好" /> <TextView android:layout_gravity="center" android:background="#785435" android:id="@+id/textView2" android:layout_width="150dp" android:layout_height="150dp" android:text="喜" /> <TextView android:layout_gravity="center" android:background="#985764" android:id="@+id/textView3" android:layout_width="100dp" android:layout_height="100dp" android:text="欢 " /> <TextView android:layout_gravity="center" android:background="#697524" android:id="@+id/textView4" android:layout_width="50dp" android:layout_height="50dp" android:text="你" /> </FrameLayout>
4:绝对布局
AbsoluteLayout:
1>AbsoluteLayout(绝对布局)
又可以叫做坐标布局,可以直接指定子元素的绝对位置
2>由于手机屏幕尺寸差别比较大
使用绝对定位的适应性会比较差,在屏幕的适配上有缺陷,在开发中很少用
它的子控件的属性
android:layout_x = "35dip" 控制当前子类控件的x位置
android:layout_y = "40dip" 控制当前子类控件的y位置
5:TableLayout的属性
<!--android:layout_column = "1" 这句话没有自动提示,可以手动添加,含义是这个控件占用第二列 android:layout_span = "2",也没有提示,含义是该控件占用两列 -->
TableLayout表格布局以行列的形式管理子控件,每一行为一个TableRow的对象,当然也可以是一个View的对象 它的属性(全局属性) android:collapseColumns = "1,2" //这句话的意思是隐藏第二列和第三列 隐藏从0开始的索引列。列之间必须用逗号隔开:1,2,5 android:shrinkColumns = "1,2" //这句话的意思是收缩第二列和第三列,从而不会因为Button内容过多而被挤出屏幕 收缩从0开始的索引列。当可收缩的列太宽(内容过多)不会被挤出屏幕 列之间必须用逗号隔开:1,2,5,你可以通过"*"代替收缩所有列 注意一列能同时表示收缩和拉伸。 android:stretchColumns = "1,2" //这句话的意思是拉伸第二列和第三列,使这一行的空余空间被占满 如果这一行所有空间的大小都要相同,那就是stretchColumns = "*" 拉伸从0开始的索引列。以填满剩下的多余空白空间 列之间必须用逗号隔开:1,2,5,你可以通过“*”代替收缩所有列 注意一列能同时表示收缩和拉伸 TableLayout的局部属性(内部空间所用属性) android:layout_column = "1" 该控件显示在第二列 android: layout_span = "2" 该控件占据2列
开发中常用到的布局一般是线性布局和相对布局,TableLayout不常用,但是计算器等工具需要用表格布局