学习笔记之-Android应用的界面编程(布局管理器)

一,视图组件和容器组件

       1,Android应用绝大部分UI组件放在android.widget包及android.view包中。
       2,Android应用的所有UI组件都继承了View类,View代表一个空白的矩形区域。
       3,ViewGroup为View的子类,通常作为其他组件的容器使用。
       4,Android采用”组合器“设计模式来设计View和ViewGroup:  ViewGroup 作为容器用来盛装其他组件,可以包含
            ViewGroup和View

       5,Android推荐使用XML布局文件来定义用户界面,所以的组件都提供了两种方式来控制组件的行为:
             (1)在XML布局文件中通过XML属性进行控制。
             (2)在Java程序代码中通过调用方法进行控制。(不推荐使用,不利于高层次的解耦。 一般混合使用
              一般将变化小,行为比较固定的组件放在XML布局文件中管理,而变化多,行为控制复杂的组件则交给
              java代码来管理。

二 ,ViewGroup类

          ViewGroup类可以当成普通的View使用,但主要还是作为容器类使用。
         ViewGroup 容器控制其子组件的分布依赖于ViewGroup.LayoutParams,ViewGroup.MarginLayoutParams两个内部类。他们提供了一些XML属性,ViewGroup容器的子组件可以指定这些XML属性。
   
          ViewGroup.LayoutParams支持的属性:  layout_height  ,  layout_width
         ViewGroup.MarginLayoutParams支持的属性:layout_marginBottom ......
     
         Context代表访问Android应用环境的全局信息的API。让UI组件持有Context参数,可让这些UI组件通过该Context参数来获取Android应用环境的全局信息。 Activity,Service都继承了Context。所以Activity和Service都可以作为Context使用。
         Context本身是一个抽象类,Android应用的

三, 布局管理器

       对于不同的分辨率,尺寸的手机,布局管理器可以根据运行平台来调整组件的大小,我们要做懂得就是为容器选择合适的布局管理器。
       Android的布局管理器本身就是一个UI组件,都是ViewGroup的子类,因此可以调用多个重载的addView()向布局管理器中添加组件。而它又继承了view所以可以相互嵌套到其他布局管理器中。

     (1) LinearLayout  线性布局 (继承于ViewGroup)
 
         LinearLayout  可以控制组件纵向或者横向排列 (通过orientation属性控制),android的线性布局不会换行,当组件一个挨着一个排列到头后,剩下的组件将不会显示。
         LinearLayout  包含的子元素都受LinearLayout .LayoutParams控制,所以LinearLayout  的子元素可以指定   layout_gravity和layout_weight 属性。
         layout_gravity : 指定该子元素在LinearLayout  中的对齐方式。
         layout_weight : 指定该子元素在LinearLayout  中的所占权重。
        (gravity用于控制所包含的子元素的对齐方式,一般容器才支持该属性

   (2) TableLayout  表格布局 (继承于LinearLayout 

          TableLayout 继承于LinearLayout,采用行列的形式来管理UI组件,通过添加TableRow,其他组件来控制表格的行数和列数。
           每次添加一个TableRow,该TableRow就表示一个表格行,然后添加其他组件,每添加一个组件就表示该表格增加一列。
           表格布局中列的宽度由该列中最宽的单元格决定,整个表格布局的宽度取决于父容器的宽度(默认占满父容器)。
           单元格(即列)可以设置三种形式:  
            Shrinkable(表示该列可以收缩,保证表格适应父容器宽度),  
            Stretchable(表示该列可以拉伸,保证表格填满父容器宽度)
            Collapsed (表示该列被隐藏)
            除了支持LinearLayout所有XML属性外,还支持shrinkableColumns,stretchableColumns,collapsed Columns设置列序号(从0开始计数)

  (3)   FrameLayout  帧布局 (继承于ViewGroup)

          FrameLayout  容器为每个加入其中的组件创建一个空白区域(称为一帧),每个组件占据一帧,根据gravity属性自动对齐。把组件一个一个叠在一起。先定义的位于下面。
           FrameLayout  包含的子元素也受LayoutParams控制,所以子元素可以指定  layout_gravity和layout_weight 属性。  
(Android的View和UI组件不是线程安全的,所以不允许启动线程访问用户界面的UI组件,一般通过定义Hander来处理)

  (4)  RelativeLayout  相对布局  (继承于ViewGroup)

         RelativeLayout容器内组件的位置总是相对兄弟组件和父容器来决定的。
         支持 gravity 和 ignoreGravity (设置组件不受gravity 影响)属性。
          RelativeLayout 提供了LayoutParams内部类,该类提供了大量对XML属性控制子组件的布局分布:                  
         layout_centerHorizontal ,layout_alignParentLeft , layout_above .............
         也可指定MarginLayoutParams类支持的XML属性。
      
  (5)  GridLayout   网格布局  (4.0新增)

          GridLayout  布局把整个容器划分成rows X  columns 个网格  ,每个网格放置一个组件。另外,一个组件也可以跨多个行列。            
         GridLayout  常用的XML属性: alignmentMode(设置对齐模式) columnsCount(设置网格列数量)
         rowCount(设置网格行数量)。
         GridLayout  提供了LayoutParams内部类,该类提供了大量对XML属性控制子组件的布局分布: 
                layout_column (子组件在容器中第几列) ,layout_columnSpan(子组件在容器中横向跨几列),
                layout_row (子组件在容器中第几行) ,layout_rowSpan(子组件在容器中纵向跨几行),layout_gravity
  
  (6)  AbsoluteLayout  绝对布局 (不同分辨率手机存在较大差异,不推荐使用)

        AbsoluteLayout  作为布局容器时,布局容器不再管理子组件的位置,大小--都由开发人员自己控制。
        AbsoluteLayout  中每个子组件可以指定XML属性:  layout_x  ,layout_y
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值