前面认识了android的工程文件后,现在应该学习android的五种布局方式了,就是软件的界面。使用过MFC的人肯定知道摆放控件的界面,MFC采用的是鼠标拖动的方式进行布局,而android提供了一种简单编程的方式进行布局,这样能实现比较精准和炫丽的布局,个人觉得还是比较好的,学起来也很容易。五种布局方式分别是:FrameLayout(框架布局),LinearLayout (线性布局),AbsoluteLayout(绝对布局),RelativeLayout(相对布局),TableLayout(表格布局)。我目前用得比较多的是线性布局和相对布局,相对布局对屏幕尺寸有很好的适应性。下图是继承自ViewGroup的一些布局类,可以帮助理解。每一个布局都有自己的方式,这五个布局元素可以相互嵌套应用,做出美观的界面。
1、FrameLayout(框架布局)
官方文档的定义:FrameLayout是最简单的一个布局对象。它被定制为你屏幕上的一个空白备用区域,之后你可以在其中填充一个单一对象 — 比如,一张你要发布的图片。所有的子元素将会固定在屏幕的左上角;你不能为FrameLayout中的一个子元素指定一个位置。后一个子元素将会直接在前一个子元素之上进行覆盖填充,把它们部份或全部挡住。
2、LinearLayout(线性布局)
线性布局是一个视图组,它所有的子视图都在一个方向对齐,水平或者垂直。提供了控件水平垂直排列的模型,可以通过设置子控件的weight布局参数控制各个控件在布局中的相对大小,可以通过android:orientation 属性指定布局的方向。线性布局的所有子视图排列都是一个靠着另一个,因此垂直列表每行仅仅有一个子视图,不管有多宽。水平列表只能有一行的高度(最高子视图的高度加上边距距离)。
以下是LinearLayout常用属性:
layout_weigh是LineaLayout布局的重要的属性,指定每个子控件在父级线性布局中的相对重要性,这个weight在垂直布局时,代表行距;水平的时候代表列宽;weight值越大就越大。
layout_weight特殊说明:与其它线性布局属性不同,其它线性的属性应用在布局视图本身,而这个属性是应用在它的子控件上的。当屏幕上有足够空间来正确的展示所有控件的时候,这个权值技巧很有效。那就是说,当空间很紧的时候,权值属性可能会被其它因素覆盖,比如视图裁剪或者在TextView下试图不环绕文本。
属性介绍:
水平(vertical)垂直(horizontal)
fill-parent:占满整个屏幕,wrap-content:刚好适合控件内容的大小
对齐方式gravity取值:
top:不改变大小,位置置于容器的顶部
bottom:不改变大小,位置置于容器的底部
left:不改变大小,位置置于容器的左边
right:不改变大小,位置置于容器的右边
center_vertical:不改变大小,位置置于容器的纵向中央部分
center_horizontal:不改变大小,位置置于容器的横向中央部分
center:不改变大小,位置置于容器的横向和纵向的中央部分
fill_vertical:可能的话,纵向延伸可以填满容器
fiil_horizontal:可能的话,横向延伸可以填满容器
fiil:可能的话,纵向和横向延伸填满容器
3、AbsoluteLayout(绝对布局)
AbsoluteLayout(坐标布局)让子元素在指定准确的x/y坐标值上显示。(0, 0)为左上角,当向下或向右移动时,坐标值将变大。通常不推荐使用AbsoluteLayout,除非你有正当理由要使用它,因为它使界面代码太过刚性,以至于在不同的设备上可能不能很好地工作。Android:layout_x/layout_y=”56px”:确定控件位置;
4、RelativeLayout(相对布局)
以相对位置显示它的子元素,一个视图可以指定相对于它的兄弟视图的位置(例如在给定视图的左边或者下面)或相对于RelativeLayout的特定区域的位置(例如底部对齐,或中间偏左)。属性比较多,下面汇总出来:
第一类:属性值为true或false
android:layout_centerHrizontal :水平居中
android:layout_centerVertical :垂直居中
android:layout_centerInparent :相对于父元素完全居中
android:layout_alignParentBottom :贴紧父元素的下边缘
android:layout_alignParentLeft :贴紧父元素的左边缘
android:layout_alignParentRight :贴紧父元素的右边缘
android:layout_alignParentTop :贴紧父元素的上边缘
android:layout_alignWithParentIfMissing :如果对应的兄弟元素找不到的话就以父元素做参照物
第二类:属性值必须为id的引用名“@id/id-name”
android:layout_below :在某元素的下方
android:layout_above :在某元素的的上方
android:layout_toLeftOf :在某元素的左边
android:layout_toRightOf :在某元素的右边
android:layout_alignTop :本元素的上边缘和某元素的的上边缘对齐
android:layout_alignLeft :本元素的左边缘和某元素的的左边缘对齐
android:layout_alignBottom :本元素的下边缘和某元素的的下边缘对齐
android:layout_alignRight :本元素的右边缘和某元素的的右边缘对齐
第三类:属性值为具体的像素值,如10px,40px
android:layout_marginBottom :离某元素底边缘的距离
android:layout_marginLeft :离某元素左边缘的距离
android:layout_marginRight :离某元素右边缘的距离
android:layout_marginTop :离某元素上边缘的距离
5、TableLayout(表格布局)
是一个ViewGroup以表格显示它的子视图(view)元素,即行和列标识一个视图的位置。一个TableLayout 由许多的TableRow 组成,每个TableRow 都会定义一行( row ,你可以定义其它的子对象,这在下面会解释到)。TableLayout 容器不会显示row 、cloumns 或cell 的边框线。每个 row 拥有0个或多个的cell ,每个cell 拥有一个View 对象。
用表格布局需要知道以下几点:
android:shrinkColumns:setShrinkAllColumns(boolean),作用是设置表格的列是否收缩(列编号从0开始,下同),多列用逗号隔开(下同),如android:shrinkColumns="0,1,2",即表格的第1、2、3列的内容是收缩的以适合屏幕,不会挤出屏幕。
android:collapseColumns:setColumnCollapsed(int,boolean),作用是设置表格的列是否隐藏
android:stretchColumns:setStretchAllColumns(boolean),作用是设置表格的列是否拉伸
以上的属性可以参考:http://www.apkbus.com/forum.php?mod=viewthread&tid=202
为了便于阅读我也粘贴过来了:
android:collapseColumns:以第0行为序,隐藏指定的列:
android:collapseColumns该属性为空时,如下图:
把android:collapseColumns=0,2 意思是把第0和第2列去掉,如下图:
android:shrinkColumns:以第0行为序,自动延伸指定的列填充可用部分:
当LayoutRow里面的控件还没有布满布局时,shrinkColumns不起作用,如下图:
设置了shrinkColumns=0,1,2,布局完全没有改变,因为LayoutRow里面还剩足够的空间。
当LayoutRow布满控件时,如下图:
设置设置了shrinkColumns=2,则结果如下图,控件自动向垂直方向填充空间:
android:stretchColumns:以第0行为序,尽量把指定的列填充空白部分:
设置stretchColumns=1,则结果如下图,第1列被尽量填充(Button02与TextView02同时向右填充,直到TextView03被压挤到最后边)。
最后对Layout的属性进行介绍,便于以后查找:
android:id为控件指定相应的ID
android:text 指定控件当中显示的文字,需要注意的是,这里尽量使用strings.xml文件当中的字符串
android:gravity 指定View组件的对齐方式,比如说居中,居右等位置 这里指的是控件中的文本位置并不是控件本身
android:layout_gravity 指定Container组件的对齐方式.比如一个button 在linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置.以button为 例,android:layout_gravity="right"则button靠右
android:textSize 指定控件当中字体的大小
android:background 指定该控件所使用的背景色,RGB命名法
android:width 指定控件的宽度
android:height 指定控件的高度
android:layout_width 指定Container组件的宽度
android:layout_height 指定Container组件的高度
android:layout_weight View中很重要的属性,按比例划分空间
android:padding* 指定控件的内边距,也就是说控件当中的内容
android:sigleLine 如果设置为真的话,则控件的内容在同一行中进行显示
android:scaleType 是控制图片如何resized/moved来匹对ImageView的siz
android:layout_centerHrizontal 水平居中
android:layout_centerVertical 垂直居中
android:layout_centerInparent 相对于父元素完全居中
android:layout_alignParentBottom 贴紧父元素的下边缘
android:layout_alignParentLeft 贴紧父元素的左边缘
android:layout_alignParentRight 贴紧父元素的右边缘
android:layout_alignParentTop 贴紧父元素的上边缘
android:layout_alignWithParentIfMissing 如果对应的兄弟元素找不到的话就以父元素做参照物
android:layout_below 在某元素的下方
android:layout_above 在某元素的的上方
android:layout_toLeftOf 在某元素的左边
android:layout_toRightOf 在某元素的右边
android:layout_alignTop 本元素的上边缘和某元素的的上边缘对齐
android:layout_alignLeft 本元素的左边缘和某元素的的左边缘对齐
android:layout_alignBottom 本元素的下边缘和某元素的的下边缘对齐
android:layout_alignRight 本元素的右边缘和某元素的的右边缘对齐
android:layout_marginBottom 离某元素底边缘的距离
android:layout_marginLeft 离某元素左边缘的距离
android:layout_marginRight 离某元素右边缘的距离
android:layout_marginTop 离某元素上边缘的距离
android:paddingLeft 本元素内容离本元素右边缘的距离
android:paddingRight 本元素内容离本元素上边缘的距离
android:hint 设置EditText为空时输入框内的提示信息
android:LinearLayout 它确定了LinearLayout的方向,可以为vertical(垂直布局),horizontal(水平布局)
android:interpolator ::::定义一个动画的变化率(the rate of change)。这使得基本的动画效果(alpha, scale, translate, rotate)得以加速,减速,重复等。用通俗的一点的话理解就是:动画的进度使用 Interpolator 控制。interpolator 定义了动画的变化速度,可以实现匀速、正加速、负加速、无规则变加速等。Interpolator 是基类,封装了所有 Interpolator 的共同方法,它只有一个方法,即 getInterpolation (float input),该方法 maps a point on the timeline to a multiplier to be applied to the transformations of an animation。
Android 提供了几个 Interpolator 子类,实现了不同的速度曲线,如下:
AccelerateDecelerateInterpolator 在动画开始与介绍的地方速率改变比较慢,在中间的时侯加速
AccelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始加速
CycleInterpolator 动画循环播放特定的次数,速率改变沿着正弦曲线
DecelerateInterpolator 在动画开始的地方速率改变比较慢,然后开始减速
LinearInterpolator 在动画的以均匀的速率改变