談談View類、ViewGroup類他們之間的關係

    在android開發中android的UI界面都是由View和ViewGroup及其派生類組合而成的。其中,View是所有UI組件的基類,而ViewGroup是容納這些組件的容器,其本身也是從View派生出來的。

作爲容器的ViewGroup可以包含作爲葉子節點的View,也可以包含作爲更低層次的子ViewGroup,而子ViewGroup又可以包含下一層的葉子節點的View和ViewGroup。事實上,這種靈活的View層次結構可以形成非常複雜的UI佈局,開發者可據此設計、開發非常精緻的UI界面。

wKiom1RPCrCiJ3YCAACCJpQvLHA011.jpg

    一般來說,開發Android應用程序的UI界面都不會直接實用View和ViewGroup,而是使用這兩大基類的派生類。


    View派生出的直接子類有:AnalogClock,ImageView,KeyboardView,ProgressBar,SurfaceView,TextView,ViewGroup,ViewStub


    View派生出的間接子類有:AbsListView,AbsSeekBar, AbsSpinner, AbsoluteLayout, AdapterView<T extends Adapter>,AdapterViewAnimator, AdapterViewFlipper, AppWidgetHostView, AutoCompleteTextView,Button,CalendarView, CheckBox, CheckedTextView, Chronometer, CompoundButton,


    ViewGroup派生出的直接子類有:AbsoluteLayout,AdapterView<T extends Adapter>,FragmentBreadCrumbs,FrameLayout,LinearLayout,RelativeLayout,SlidingDrawer


    ViewGroup派生出的間接子類有:AbsListView,AbsSpinner, AdapterViewAnimator, AdapterViewFlipper, AppWidgetHostView, CalendarView, DatePicker, DialerFilter, ExpandableListView, Gallery, GestureOverlayView,GridView,HorizontalScrollView, ImageSwitcher,ListView,這裏特別指出,ImageView是佈局具有圖片效果的UI常用的類,SurfaceView是用來進行遊戲開發的與一般View相比較爲特殊的非常重要的類(後續會對原理作深入分析),而AbsoluteLayout、FrameLayout,LinearLayout, RelativeLayout這幾個ViewGroup的直接子類是Android UI佈局中最基本的佈局元素。

    值得一提的是,上述的所有基類、派生類都是Android framework層集成的標準系統類,開發者在應用開發中可直接引用SDK中這些系統類及其API。但事實上,在UI開發的很多場景下,直接使用這些系統類並不能滿足應用開發的需要。比如說,我們想用ImageView在默認情況下加載一幅圖片,但是希望在點擊該View時View變換出各種圖像處理效果,這個時候直接使用ImageView是不行的,此時我們可以重載ImageView,在新派生出的子控件中重載OnDraw等方法來實現我們的定製效果。這種派生出系統類的子類方法我們通常稱之爲自定義控件。自定義控件可像標準View控件那樣在XML及我們的Java文件中進行佈局和實例化,但在佈局時必須指出其完整的包名和類名。事實上,自定義控件的使用是我們進行Android 開發的必不可少的基本用法,是必須掌握的基本技巧。


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章