界面编程与视图(View)组件

一、视图组件与容器组件

     Android应用的绝大部分UI组件都放在android.widget包及其子包、android.view包及其子包中,Android应用的所有UI组件都继承了View类。

     View类有重要的子类:ViewGroup,但ViewGroup通常作为其他组件的容器使用。

    Android的所有UI组件都是建立在View、ViewGroup基础之上的,Android采用了“组合器”设计模式来设计View和ViewGroup:ViewGroup是View的子类,因此ViewGroup也可被当成View使用。对于一个Android应用的图形图形用户界面来说,ViewGroup作为容器来盛装其他组件,而ViewGroup里除了可以包含普通View组件之外,还可以再次包含ViewGroup组件。

    图2.1显示了Android图形用户界面的组件层次图。
  

图2.1图形用户界面的组件层次图

 

    Android推荐使用XML布局文件来定义用户界面,而不是使用Java代码来开发用户界面,因此所有组件都提供了两种方式来控制组件的行为:

  •  在XML布局文件中通过XML属性进行控制。
  • 在Java程序代码中通过调用方法进行控制。   

   

   ViewGroup继承了View类,当然也可以当成普通View来使用,但VewGroup主要还是当成容器类使用。但由于ViewGroup是一个抽象类,因此实际使用中通常总是使用ViewGroup的子类作为容器,例如各种布局管理器。

   ViewGroup容器控制其子组件的分布依赖于ViewGroup.LayoutParams、ViewGroup.MarginLayoutParams两个内部类。这两个内部类都提供了一些XML属性,ViewGroup容器中的子组件可以指定这些XML属性。    

   图2.2显示了ViewGroup.LayoutParams所支持的两个XML属性

    XML属性        说明
android:laout_height 指定子组件的布局高度
android:layout_height 指定该子组件的布局宽度

 android:layout_height、android:layout_width两个属性,支持如下三个属性值。

  • fill_parent:指定子组件的高度、宽度与父容器组件的高度、宽度相同(实际上还要减去填充的空白距离)
  • match_parent:该属性值与fill_parent完全相同,且从Android 4.2开始就推荐使用这个属性来代替fill_parent。
  • wrap_content:指定子组件的大小恰好能包裹它的内容即可。

图2.3显示了ViewGroup.MarginLayoutParams用于控制子组件周围的页边距(Margin,也就是组件四周的留白),它支持的XML属性如图2.3所示

XML属性 相关方法 说明
android:layout_marginBottom setMargins(int,int,int,int) 指定该子组件下边的页边距
android:layout_marginLeft setMargins(int,int,int,int) 指定该子组件左边的页边距
android:layout_marginRight setMargins(int,int,int,int) 指定该子组件右边的页边距
android:layout_marginTop   setNargins(int,int,int,int) 指定该子组件上边的页边距

二、使用XML布局文件控制UI界面

     Android推荐使用XMl布局文件来控制视图,这样不仅简单、明了,而且可以将应用的视图控制逻辑从Java代码中分离出来,放入XML文件中控制,从而更好的体现MVC原则。

     当我们在Android应用的res/layout目录下定义一个主文件名任意的XML布局文件之后(R.java会自动收录该布局资源),Java代码可通过如下方法在Activity中显示该视图:

                     setContentView(R.layout.<资源文件名>)                                                        

      当在布局文件中添加多个UI组件时,都可以为该UI组件指定android:id属性,该属性的属性值代表该组件的唯一标识。接下来如果希望在Java代码中访问指定UI组价,可通过如下代码来访问它:

                    findViewById(R.id.<android.id.属性值>)                                                         

      一旦在程序中获得指定UI组件之后,接下来就可以通过代码来控制UI组件的外观行为啦,包括为UI组件绑定事件监听器等。

posted @ 2013-09-24 08:43  TealerProg  Views(617)  Comments(0Edit  收藏  举报