Android UI 概览

一、Android应用中的绝大部分的UI组件都位于   android.widget包及其子包 、android.view包           

及其子包中,所有的UI组件都继承了View类,这个View类是一个实际的类,不是抽象类或者接             

口,View还有一个非常重要的子类——ViewGroup , ViewGroup是一个抽象类,所有的布局           

管理器,如:LinearLayout类都是它的子类,这些类都是实际的类,一般ViewGroup的子类是              

当做容器来使用的,而且由于ViewGroup本身就是View的子类,所以在这些容器中还能够添加           

ViewGroup容器,这样一来就能够构建UI系统了 ;也就说View和ViewGroup构成了Android          

中的全部UI界面

二、我们知道由于在Android中提倡使用XML来布局UI组件,那么所有的组件自然就会有XML属性

      有这些属性来控制UI组件的属性,当然这些属性大多也有java方法与之对应,以便使用java代码           

来控制组件

三、ViewGroup抽象类中含有两个静态内部类:

       ViewGroup.LayoutParams 、 ViewGroup.MarginLayoutParams

       (注:实际上后者是前者的子类)

       当我们向ViewGroup的子类容器中添加组件时,需要使用这两个内部类来指定,到底以何种方             

式添加,比如:组件的布局大小,组件的位置等属性

       注意在ViewGroup的所有子类中,都含有继承自ViewGroup.LayoutParams 或者              

ViewGroup.MarginLayoutParams的静态内部类,这些静态内部类的名字都叫做         

类名.LayoutParams   ,如:LinearLayout.LayoutParams ; 这样一来不管指定组件

       添加到何种ViewGroup容器中,都可以使用对应的静态内部类的XML属性来指定添加方式,

       这些静态内部类中都有对应的XML属性,比如:android:layout_height、

      android:layout_width属性,使用方法如:

    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"    

xmlns:tools="http://schemas.android.com/tools"    

android:layout_width="match_parent"    

android:layout_height="match_parent" >

    <TextView         android:id="@+id/textView1"        

android:layout_width="wrap_content"        

android:layout_height="wrap_content"        

android:text="@string/hello_world" />

</RelativeLayout>

也就是说在组件的属性定义区中直接使用android:layout_width属性就行了 ; 你可能会有费解

“这些静态内部类的XML属性并不是这些组件的XML属性,为什么能够直接在组件中使用,而不用声  

明一下:我使用的属性,是静态内部类中指定的属性 呢?”,实际上已经指定了我们使用的属性是

静态内部类指定的属性,android:layout_width中的 layout 关键字就是设个说明,我们可能注意

到,组件的属性中已经有android:width这样的属性了,所以说android:layout_width和

android:width的不同,就体现出来了; 所以以后在看到带有layout或者layout_margin(如:

android:layout_marginTop)的XML属性,就应知道这是

使用的是静态内部类中的属性,而不带有layout的属性的XML属性,则是组件本身带有的属性;

实际上我们可以查看:《疯狂Android》P45中代码,就会发现当我们使用java代码来指定Button组

件的属性时,如果使用LinearLayout的静态内部类的属性时,使用方式什么样的;这就是内部机制,

只是使用XML时将这些内部机制给隐藏起来了

四、按照上面的说法既然组件本身已经有了有了想android:width属性了,为什么还要使用静态内             

部类指定的android:layout_width这个布局属性(注意这叫做布局属性,即布局高度、布局             

宽度),因为Android中规定一个组件的大小是由布局和实际大小共同决定的,至于决定方式

见《疯狂android》P44

posted @ 2014-09-13 10:37  RoperLee  阅读(204)  评论(0)    收藏  举报