Android的布局控件也可以称为容器控件,它们都继承自ViewGroup,非可视化控件。
Android布局控件分为六类:
LinearLayout(线性布局)
RelativeLayout(相对布局)
TableLayout(表格布局)
FrameLayout(帧布局)
AbsoluteLayout(绝对布局)
GridLayout(网格布局)
LinearLayout中Weight(权重)属性:分配完所有控件的区域后,剩下的区域按照Weight值的比例进行分配。
计算方法(使用宽权重时,LinearLayout设置水平,高权重,LinearLayout设置垂直):
1.当设置同一容器下的所有可视化控件(比如TextView)的宽(高)为0dp时(宽和高只能设置其中一个为0dp),并且设置了Weight属性,这个容器下的可视化控件会按照Weight的比例来分配宽度(高度)。
2.同上如果都设置为wrap_content,系统会先分配控件大小,再把剩余的区域按Weight比例分配给设置Weight属性的控件。
3.同上都设置为match_parent,比如有三个TextView,宽高都是设置为match_parent,设置每个TextView的Weight为1,2,3。屏幕只有一个我们设置为1,现在需要三个,1-3=-2,剩余的区域为-2,将剩余区域按照Weight比例分配给每个控件
第一个TextView真正区域为1+(-2*(1/6))=2/3;
第二个TextView真正区域为1+(-2*(2/6))=1/3
第三个TextView真正区域为1+(-2*(3/6))=0
所以你会发现屏幕上只有第一个和第二个TextView,分别占屏幕的比例时2:1
Java
代码设置权重:
setLayoutParams(new LayoutParams(LayoutParams.FILL_PARENT,
LayoutParams.WRAP_CONTENT, 1));
orientation属性
值为vertical,只有水平方向的设置才起作用,垂直方向的设置不起作用。
即:left,right,center_horizontal 是生效的。
值为horizontal,只有垂直方向的设置才起作用,水平方向的设置不起作用。
即:top,bottom,center_vertical 是生效的。
divider属性
android:divider设置作为分割线的图片
android:showDividers设置分割线的位置,none(无),begining(开始),end(结束),middle(每两个组件间)
dividerPadding设置分割线的Padding
RelativeLayout当界面非常复杂时,我们往往采用RelativeLayout代替LinearLayout,使用LinearLayout
做复杂的界面会出现多次嵌套,这样会降低UI的渲染速度
注意一点:margin可以设置为负数
TableLayout(表格布局):基本不用。
FrameLayout(帧布局):默认将其中的控件放在左上角,最下面的控件在最上面,上下控件呈现覆盖模式,不长使用,记住两个属性:
android:foreground:设置改帧布局容器的前景图像
android:foregroundGravity:设置前景图像显示的位置
GridLayout(网格布局) :不常用,注意是Android4.0后推出的,低版本使用需要引入v7包,个人理解这个容器改善了表格布局。
AbsoluteLayout(绝对布局) :基本不使用,因为这个容器是通过x,y的坐标来确定控件的位置,由于Android有大量不同的屏幕尺寸,所以同样坐标在4寸手机上显示正常,到5寸手机上可能就会变形。