Android学习 4 -> 布局结构的学习

         Android的界面是有布局和组件协同完成的,布局好比是建筑里的框架,而组件则相当于建筑里的砖瓦。组件按照布局的要求依次排列,就组成了用户所看见的界面。

         Android的五大布局分别是LinearLayout(线性布局)、FrameLayout(单帧布局)、RelativeLayout(相对布局)、AbsoluteLayout(绝对布局)和TableLayout(表格布局)。其可以分为下图所示内容:

 

     

        LinearLayout:线形布局
           LinearLayout按照垂直或者水平的顺序依次排列子元素,每一个子元素都位于前一个元素之后。如果是垂直排列,那么将是一个N行单列的结构,每一行只会有一个元素,而不论这个元素的宽度为多少;如果是水平排列,那么将是一个单行N列的结构。如果搭建两行两列的结构,通常的方式是先垂直排列两个元素,每一个元素里再包含一个LinearLayout进行水平排列。

          LinearLayout中的子元素属性android:layout_weight生效,它用于描述该子元素在剩余空间中占有的大小比例。加入一行只有一个文本框,那么它的默认值就为0,如果一行中有两个等长的文本框,那么他们的android:layout_weight值可以是同为1。如果一行中有两个不等长的文本框,那么他们的android:layout_weight值分别为1和2,那么第一个文本框将占据剩余空间的三分之二,第二个文本框将占据剩余空间中的三分之一。android:layout_weight遵循数值越小,重要度越高的原则。

 

        RelativeLayout:相对布局
          RelativeLayout按照各子元素之间的位置关系完成布局。在此布局中的子元素里与位置相关的属性将生效。例如android:layout_below, android:layout_above等。子元素就通过这些属性和各自的ID配合指定位置关系。注意在指定位置关系时,引用的ID必须在引用之前,先被定义,否则将出现异常。

         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 本元素的右边缘和某元素的的右边缘对齐

       第三类:

        属性值为具体的像素值,如30dip,40px

        android:layout_marginBottom 离某元素底边缘的距离

        android:layout_marginLeft 离某元素左边缘的距离

        android:layout_marginRight 离某元素右边缘的距离

        android:layout_marginTop 离某元素上边缘的距离

        EditText的android:hint设置EditText为空时输入框内的提示信息。

        android:gravity 

        android:gravity属性是对该view 内容的限定.比如一个button 上面的text. 你可以设置该text 在view的靠左,靠右等位置.以button为例,android:gravity="right"则button上面的文字靠右android:layout_gravity

        android:layout_gravity是用来设置该view相对与起父view 的位置.比如一个button 在linearlayout里,你想把该button放在靠左、靠右等位置就可以通过该属性设置.以button为例,android:layout_gravity="right"则button靠右

        android:layout_alignParentRight使当前控件的右端和父控件的右端对齐。这里属性值只能为true或false,默认false。

       android:scaleType:android:scaleType是控制图片如何resized/moved来匹对ImageView的size。

       ImageView.ScaleType / android:scaleType值的意义区别:

      CENTER /center 按图片的原来size居中显示,当图片长/宽超过View的长/宽,则截取图片的居中部分显示       CENTER_CROP / centerCrop 按比例扩大图片的size居中显示,使得图片长(宽)等于或大于View的长(宽)CENTER_INSIDE / centerInside 将图片的内容完整居中显示,通过按比例缩小或原来的size使得图片长/宽等于或小于View的长/宽

      FIT_CENTER / fitCenter 把图片按比例扩大/缩小到View的宽度,居中显示FIT_END / fitEnd 把图片按比例扩大/缩小到View的宽度,显示在View的下部分位置FIT_START / fitStart 把图片按比例扩大/缩小到View的宽度,显示在View的上部分位置FIT_XY / fitXY 把图片不按比例扩大/缩小到View的大小显示MATRIX / matrix 用矩阵来绘制,动态缩小放大图片来显示。

            RelativeLayout是Android五大布局结构中最灵活的一种布局结构,比较适合一些复杂界面的布局。下面示例就展示这么一个情况,第一个文本框与父组件的底部对齐,第二个文本框位于第一个文本框的上方,并且第三个文本框位于第二个文本框的左方。

        FrameLayout:单帧布局
            FrameLayout是五大布局中最简单的一个布局,在这个布局中,整个界面被当成一块空白备用区域,所有的子元素都不能被指定放置的位置,它们统统放于这块区域的左上角,并且后面的子元素直接覆盖在前面的子元素之上,将前面的子元素部分和全部遮挡。显示效果如下,第一个TextView被第二个TextView完全遮挡,第三个TextView遮挡了第二个TextView的部分位置。

       AbsoluteLayout:绝对布局(在Android中由于像素不固定,基本不使用此布局)
            AbsoluteLayout是绝对位置布局。在此布局中的子元素的android:layout_x和android:layout_y属性将生效,用于描述该子元素的坐标位置。屏幕左上角为坐标原点(0,0),第一个0代表横坐标,向右移动此值增大,第二个0代表纵坐标,向下移动,此值增大。在此布局中的子元素可以相互重叠。在实际开发中,通常不采用此布局格式,因为它的界面代码过于刚性,以至于有可能不能很好的适配各种终端

       Tablelayout:表格布局(在4.0以后出现)
    一、Tablelayout简介
           Tablelayout类以行和列的形式对控件进行管理,每一行为一个TableRow对象,或一个View控件。
              当为TableRow对象时,可在TableRow下添加子控件,默认情况下,每个子控件占据一列。
              当为View时,该View将独占一行。
     二、TableLayout行列数的确定
           TableLayout的行数由开发人员直接指定,即有多少个TableRow对象(或View控件),就有多少行。
           TableLayout的列数等于含有最多子控件的TableRow的列数。如第一TableRow含2个子控件,第二个TableRow含3个,第三个TableRow含4个,那么该TableLayout的列数为4.
     三、TableLayout可设置的属性详解
          TableLayout可设置的属性包括全局属性及单元格属性。
         1、全局属性也即列属性,有以下3个参数:
android:stretchColumns    设置可伸展的列。该列可以向行方向伸展,最多可占据一整行。(此属性由于是默认的,使用时有没有都可以,对布局没有什么影响)
android:shrinkColumns     设置可收缩的列。当该列子控件的内容太多,已经挤满所在行,那么该子控件的内容将往列方向显示。
android:collapseColumns 设置要隐藏的列。

示例:
android:stretchColumns=”0″           第0列可伸展
android:shrinkColumns=”1,2″         第1,2列皆可收缩
android:collapseColumns=”*”         隐藏所有行
            说明:列可以同时具备stretchColumns及shrinkColumns属性,若此,那么当该列的内容N多时,将“多行”显示其内容。(这里不是真正的多行,而是系统根据需要自动调节该行的layout_height)
        2、单元格属性,有以下2个参数:
android:layout_column    指定该单元格在第几列显示
android:layout_span        指定该单元格占据的列数(未指定时,为1)
示例:
android:layout_column=”1″    该控件显示在第1列
android:layout_span=”2″        该控件占据2列
说明:一个控件也可以同时具备这两个特性。

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值