Android布局(1)

来源:互联网 发布:coc狂暴法术数据 编辑:程序博客网 时间:2024/05/20 08:21

布局的基本概念:

①布局就是把界面中控件按照某种规律摆放在指定的位置

②主要就是为了解决应用程序在不同手机中的显示问题

Android实现布局的两种方式:

①代码:布局文件对应的Java类都是ViewGroup类的子类

②xml配置文件:所有的布局文件都是放在res/layout文件夹中

布局支持嵌套


布局的一些基本属性:

android:layout_width:设置控件所占的宽度

取值范围:warp_content、fill_parent、match_parent


单位:dp:逻辑长度单位,在160dpi屏幕上,1dp=1px=1/160英寸

    dpi:屏幕每英寸有多少个像素点随着密度变化,对应像素数量也变化,但没有直接的变化比例

    dip:与dp相同,多用于Google的实例中

    sp:与dp类似,但是可以根据用户的字体大小首选项进行缩放

    pt:磅,表示一个点,是屏幕的物理尺寸。大小为1英寸的1/72

    mm:毫米,屏幕的物理尺寸

    in:英寸,是屏幕的物理尺寸。每英寸等于2.54厘米   例如:形容手机屏幕大小,经常说,3.2(英)寸、3.5(英)寸、4(英)寸

    px:像素     例如:一张图片的的大小为320*480像素

在开发中,为了兼容各种手机,一般使用dp作为控件的长、宽单位。而使用sp来作为字体的单位。因为dp是与密度无关,sp除了与密度无关外,还与scale无关

例如:如果屏幕密度为160,这时dp和sp是一样的。1dp=1sp=1px。但如果使用px作单位,如果屏幕大小不变(假设还是3.2寸)。而屏幕密度变成了320。那么原来TextView的宽度设成160px,在密度为320的3.2寸屏幕里看要比在密度为160的3.2寸屏幕上看短了一半。但如果设置成160dp或160sp的话。系统会自动将width属性值设置成320px的。也就是160*320/160。其中320/160可称为密度比例因子。也就是说,如果使用dp和sp,系统会根据屏幕密度的变化自动进行转换

android:layout_height :设置控件所占的高度

取值范围同上

android:layout_gravity:当前控件在父视图中的位置

取值范围:top|bottom|left|right(上下左右)

  center_vertical(水平居中)|center_horizontal(垂直居中)|center(居中)

  fill_vertical(若有可能,纵向拉伸以填满容器)

  fill_horizontal(若有可能,横向以拉伸填满容器)

   

android:layout_marginTop:当前视图上边缘到某条基线的距离,只能取固定值

android:layout_marginButtom:当前视图下边缘到某条基线的距离,只能取固定值


Android的5大布局:

今天先说:

1.LinearLayout(线性布局):线性布局会将其中的控件一个接一个排列,可以拍横也可竖排

常用属性:①设置排列方向:(1)xml属性:android:orientation:1.horizontal(水平排列)    2.vertical(垂直排列)

                                                    (2)方法:setOrientation(int)

    ②设置组件的对齐方式(1)xml属性:android:gravity

     (2)方法:setGravity(int)

android:layout_gravity和android:gravity的区别:前者。后者是针对控件里的元素来说的,用来控制元素在该是控件里的显示位置。

特殊情况:当android:orientation="vertical"时,android:layout_gravity只有水平方向的设置才起作用,垂直方向的设置不起作用。即:left,right,center_horizontal是生效的
当android:orientation="horizontal"时,android:layout_gravity只有垂直方向的设置才起作用,水平方向的设置不起作用。即:top,bottom,center_vertical是生效的
2.FrameLayout(帧布局):①类似于ps中图层的概念
   ②为每个加入其中的组件创建单独的帧
   ③看上去像是组件叠加到一起


3.TableLayout(表格布局):①表格布局可将试图按行、列进行排列
②直接向TableLayout中添加控件,则这个控件将占一行。
③一个表格布局由一个<TableLayout>标签和若干<TableRow>标签组成
常用属性:①某列被收缩,以保证表格能完全填充父容器的宽度:shrinkColumns          setColumnShrinkable(int,boolean)
                    ②某列被收缩,以保证表格能完全填充父容器的宽度:stretchColumns          setColumnStretchable(int,boolean)
   ③某列被隐藏:android:collapseColumns    setColumnsCollapsed(int,boolean)
   ④表格跨列:android:layout_span="3"


补充:还有个网格布局