Android:的布局管理器(下篇)-GridLayout、AbsoluteLayout、android单位转换
线性布局,表格布局、帧布局和相对布局的介绍参看上一篇博文:
Android的布局管理器(上篇)
- 网格布局
- 绝对布局
网格布局
- 网格布局由GridLayout类表示,它是Android4.0新增的布局管理器。如果希望在更早的Android平台上使用该布局管理器,则需要导入相应支撑库。
- GridLayout的作用类似HTML中的table标签,它把整个容器划分成rows $\times$Columns个网格,每个网格可以放置一个组件,除此之外也可以设置一个组件横跨多少列,一个组件纵跨多少行。
参考:浅谈android4.0开发之GridLayout布局
如果需要设置某控件跨越多行或多列,只需将该子控件的android:layout_rowSpan或者layout_columnSpan属性设置为数值,再设置其layout_gravity属性为fill即可,前一个设置表明该控件跨越的行数或列数,后一个设置表明该控件填满所跨越的整行或整列。
GridLayout的常用属性
- android:alignmentMode 设置该布局管理器采用的对齐模式
- android:columnCount 设置该网格的列数量
- android:columnOrderPreserved 设置该网格布局管理器是否保留列序号
- android:rowCount 设置该网格的行数目
- android:rowOrderPreserved 设置该网格布局管理器是否保留行序号
- android:useDefaultMargins 设置布局管理器是否使用默认的页边距
GridLayout.LayoutParams常用属性
- android:layout_column 设置该子组件在GridLayout的第几列
- android:layout_columnSpan 设置该子组件在GridLayout横向上跨几行
- android:layout_gravity 设置该子组件采用何种方式占据该网格的空间
- android:layout_row 设置该子组件在GridLayout的第几行
- android:layout_rowSpan 设置该子组件在GridLayout纵向上跨几行
xml示例
|
|
绝对布局
- 绝对布局由AbsoluteLayout表示,对于AbsoluteLayout布局Android不提供任何控制,而是由开发人员自己用过X坐标和Y坐标来控制组件的位置,以及其他的一些属性。
- 大部分时候,使用绝对布局都不是一个好思路,因为运行Android应用的手机往往千差万别,因此屏幕分辨率,大小都可能存在较大差异,使用绝对布局会很难兼顾不同屏幕分辨率,大小不同的问题,因此AbsoluteLayout已经过时。
xml属性
android:layout_x 指定该子组件的x坐标
android:layout_y 指定该子组件的y坐标
Android单位与换算
详细可参考:关于 Android 适配,看完这篇文章就够了
单位
- px(像素):每一个px对应屏幕上的一点
- in:表示英寸,每英寸相当于2.54厘米
- dpi(屏幕像素密度):每英寸的像素点数比如120dpi、160dpi等,其值与屏幕尺寸和分辨率有关
- dp/dip(设备独立像素):密度无关像素,以160dpi为基准。如求xdip对应的像素值y:
$\frac{dpi}{160}\times x=y$
案例
一个手机屏幕分辨率为480*800,屏幕尺寸为3.7in。求其dpi?在布局中宽设为320dp时相当于多少px?- dpi:$ \frac{\sqrt{480^2+800^2}}{3.7} =252dpi$
- 320dp:$\frac{252}{160}\times320=504dp $
然而手机屏幕才480px,算出的结果却是504px!
注意:
手机上面计算dpi为理论值,实际上只有120(low),160(medium),240(high),320(xhigh)等几种,因此实际的计算公式为:320
$\times\frac{240}{160}=480px$,与屏幕宽度相同,刚好占据整个屏幕。