android View頁面佈局總結 最全總結。

 下面是我在工作中總結的內容,希望對大家有幫助。

 

一、佈局

View的幾種佈局顯示方式有下面幾種:線性佈局(LinearLayout)、相對佈局(RelativeLayout)、表格佈局(TableLayout)、網絡視圖(GridView)、標籤佈局(TabLayout)、列表視圖(ListView)、絕對佈局(AbsoluteLayout)。

1.     view的佈局顯示概述

在一個Android應用程序中,用戶界面通過View和ViewGroup對象構建。Android中有很多種View和ViewGroup,他們都繼承自View類。View對象是Android平臺上表示用戶界面的基本單元。View的佈局顯示方式直接影響用戶界面,View的佈局方式是指一組View元素如何佈局,準確的說是一個ViewGroup中包含的一些View怎麼樣佈局。ViewGroup類是佈局(layout)和視圖容器(View container)的基類,此類也定義了ViewGroup.LayoutParams類,它作爲佈局參數的基類,此類告訴父視圖其中的子視圖想如何顯示。例如,XML佈局文件中名爲layout_something的屬性。我們要介紹的View的佈局方式的類,都是直接或間接繼承自ViewGroup類,如下圖所示:

 

圖1、繼承自ViewGroup的一些佈局類

 

其實,所有的佈局方式都可以歸類爲ViewGroup的5個類別,即ViewGroup的5個直接子類。其它的一些佈局都擴展自這5個類。下面分小節分別介紹View的七種佈局顯示方式。

2.     線性佈局(LinearLayout)

線性佈局:是一個ViewGroup以線性方向顯示它的子視圖(view)元素,即垂直地或水平地。

Tips:android:layout_weight="1"

"weight"顧名思義是權重的意思,layout_weight 用於給一個線性佈局中的諸多視圖的重要程度賦值。所有的視圖都有一個layout_weight值,默認爲零,意思是需要顯示多大的視圖就佔據多大的屏幕空間。如果沒有設置權重值的話而屏幕中有多個要顯示的話,那隻能顯示部分(如果全部顯示會超出屏幕),所以就需要爲每個元素添加layout_weight值了。

若賦一個高於零的值,則將父視圖中的可用空間分割,分割大小具體取決於每一個視圖的layout_weight值以及該值在當前屏幕布局的整體layout_weight值和在其它視圖屏幕布局的layout_weight值中所佔的比率而定。舉個例子:比如說我們在 水平方向上有一個文本標籤和兩個文本編輯元素。該文本標籤並無指定layout_weight值,所以它將佔據需要提供的最少空間。如果兩個文本編輯元素每一個的layout_weight值都設置爲1,則兩者平分在父視圖佈局剩餘的寬度(因爲我們聲明這兩者的重要度相等)。如果兩個文本編輯元素其中第一個的layout_weight值設置爲1,而第二個的設置爲2,則剩餘空間的三分之二分給第一個,三分之一分給第二個(數值越小,重要度越高)。

Tips2: setGravity(int). 設置線性佈局的內部元素的佈局方式

在線性佈局中可使用 gravity 屬性來設置控件的對齊方式,當需要爲 gravity 設置多個值時,用“|”分隔即可。

3.     相對佈局(Relative Layout)

相對佈局:是一個ViewGroup以相對位置顯示它的子視圖(view)元素,一個視圖可以指定相對於它的兄弟視圖的位置(例如在給定視圖的左邊或者下面)或相對於RelativeLayout的特定區域的位置(例如底部對齊,或中間偏左)。

相對佈局是設計用戶界面的有力工具,因爲它消除了嵌套視圖組。如果你發現你使用了多個嵌套的LinearLayout視圖組後,你可以考慮使用一個RelativeLayout視圖組了。

Tips1:需要注意的是在進行相對佈局時要避免出現循環依賴,例如設置相對佈局在父容器中的排列方式爲WRAP_CONTENT,就不能再將相對佈局的子控件設置爲ALIGN_PARENT_BOTTOM。因爲這樣會造成子控件和父控件相互依賴和參照的錯誤。

Tips2:在相對佈局中,子控件的位置是相對兄弟控件或父容器而決定的。出於性能考慮,在設計相對佈局時要按照控件之間的依賴關係排列,如View A 的位置相對於View B 來決定,則需要保證在佈局文件中View B 在View A 的前面。

在進行相對佈局時用到的屬性很多,首先來看屬性值只爲true 或false 的屬性,如表3-1所示。

表 3-1 相對佈局中只取true 或false 的屬性

屬性名稱

屬性說明

android:layout_centerHorizontal

當前控件位於父控件的橫向中間位置

android:layout_centerVertical

當前控件位於父控件的縱向中間位置

android:layout_centerInParent

當前控件位於父控件的中央位置

android:layout_alignParentBottom

當前控件底端與父控件底端對齊

android:layout_alignParentLeft

當前控件左側與父控件左側對齊

android:layout_alignParentRight

當前控件右側與父控件右側對齊

android:layout_alignParentTop

當前控件頂端與父控件頂端對齊

android:layout_alignWithParentIfMissing

參照控件不存在或不可見時參照父控件

接下來再來看屬性值爲其他控件id的屬性,如表3-2所示。

表 3-2 相對佈局中取值爲其他控件id 的屬性及說明

屬性名稱

屬性說明

android:layout_toRightOf

使當前控件位於給出id 控件的右側

android:layout_toLeftOf

使當前控件位於給出id 控件的左側

android:layout_above

使當前控件位於給出id 控件的上方

android:layout_below

使當前控件位於給出id 控件的下方

android:layout_alignTop

使當前控件的上邊界與給出id 控件的上邊界對齊

android:layout_alignBottom

使當前控件的下邊界與給出id 控件的下邊界對齊

android:layout_alignLeft

使當前控件的左邊界與給出id 控件的左邊界對齊

android:layout_alignRight

使當前控件的右邊界與給出id 控件的右邊界對齊

最後要介紹的是屬性值以像素爲單位的屬性及說明,如表3-3所示。

表 3-3 相對佈局中取值爲像素的屬性及說明

屬性名稱

屬性說明

android:layout_marginLeft

當前控件左側的留白

android:layout_marginRight

當前控件右側的留白

android:layout_marginTop

當前控件上方的留白

android:layout_marginBottom

當前控件下方的留白

4.     表格佈局(Table Layout)

表格佈局:TableLayout類以行和列的形式管理控件,每行爲一個TableRow對象,也可以爲一個View對象,當爲View對象時,該View對象將跨越該行的所有列。在TableRow中可以添加子控件,每添加一個子控件爲一列。

TableLayout佈局中並不會爲每一行、每一列或每個單元格繪製邊框,每一行可以有0 或多個單元格,每個單元格爲一個View對象。TableLayout中可以有空的單元格,單元格也可以像HTML中那樣跨越多個列。

用表格佈局需要知道以下幾點:

(1).android:shrinkColumns,對應的方法:setShrinkAllColumns(boolean),作用:設置表格的列是否收縮(列編號從0開始,下同),多列用逗號隔開(下同),如android:shrinkColumns="0,1,2",即表格的第1、2、3列的內容是收縮的以適合屏幕,不會擠出屏幕。

(2).android:collapseColumns,對應的方法:setColumnCollapsed(int,boolean),作用:設置表格的列是否隱藏。

(3).android:stretchColumns,對應的方法:setStretchAllColumns(boolean),作用:設置表格的列是否拉伸。

Tips1:儘管可以用表格佈局圖來設計整個用戶界面,但這通常不是最好的工具,因爲表格式佈局(TableLayout)繼承自線性佈局(LinearLayout),並且而不是最有效率的佈局控件。仔細推敲就可以發現,TableLayout無非是一系列LinearLayout的有序嵌套,而且從性能上考慮一般不鼓勵層次太深的嵌套。儘管如此,對於本來就是表格形式的數據而言(如電子表格數據),表格式佈局可能是一個合理的選擇。

此外,表格佈局數據會隨屏幕尺寸和分辨率大小而改變。當需要顯示大批量數據時就需要設置滾動條。例如,如果需要在上面的例子中加入天氣狀況的評析,那麼文本就可能是一句話甚至二十句話,因此設置垂直或者水平的滾動條就是明智的選擇。

5.     列表視圖(List View)

列表佈局:是一個ViewGroup以列表顯示它的子視圖(view)元素,列表是可滾動的列表。列表元素通過ListAdapter自動插入到列表。

ListAdapter:擴展自Adapter,它是ListView和數據列表之間的橋樑。ListView可以顯示任何包裝在ListAdapter中的數據。該類提供兩個公有類型的抽象方法:

1)         public abstract boolean  areAllItemsEnabled () :表示ListAdapter中的所有元素是否可激活的?如果返回真,即所有的元素是可選擇的即可點擊的;

2)        public abstract boolean  isEnabled (int position) :判斷指定位置的元素是否可激活的。

總結一下列表佈局的關鍵部分:

Ø  佈局文件中定義ListView ;

Ø  Adapter用來將數據填充到ListView ;

Ø  要填充到ListView的數據,這些數據可以字符串、圖片、控件等等。

其中Adapter是ListView和數據源之間的橋樑,根據數據源的不同Adapter可以分爲三類:

Ø  String[]: ArrayAdapter ;

Ø  List<Map<String,?>>: SimpleAdapter ;

Ø  數據庫Cursor: SimpleCursorAdapter。

使用ArrayAdapter(數組適配器)顧名思義,需要把數據放入一個數組以便顯示;    SimpleAdapter能定義各種各樣的佈局出來,可以放上ImageView(圖片),還可以放上  Button(按鈕),CheckBox(複選框)等等;SimpleCursorAdapter是和數據庫有關的東西。

6.     網格視圖(Grid View)

網格佈局:是一個ViewGroup以網格顯示它的子視圖(view)元素,即二維的、滾動的網格。網格元素通過ListAdapter自動插入到網格。ListAdapter跟上面的列表佈局是一樣的,這裏就不重複累述了。

在風格佈局中我們會經常自定義一個ImageAdapter。ImageAdapter類擴展自BaseAdapter,所以首先得實現它所要求必須實現的方法。構造函數和getcount()函數很好理解,而getItem(int)應該返回實際對象在適配器中的特定位置,但是這裏我們不需要。類似地,getItemId(int)應該返回元素的行號,但是這裏也不需要。

這裏重點要介紹的是getView()方法,它爲每個要添加到ImageAdapter的圖片都創建了一個新的View。當調用這個方法時,一個View是循環再用的,因此要確認對象是否爲空。如果是空的話,一個ImageView就被實例化且配置想要的顯示屬性:

Ø  setLayoutParams(ViewGroup.LayoutParams):設置View的高度和寬度,這確保不管drawable中圖片的大小,每個圖片都被重新設置大小且剪裁以適應這些尺寸。

Ø  setScaleType(ImageView.ScaleType):聲明圖片應該向中心剪裁(如果需要的話)。

Ø  setPadding(int, int, int, int):定義補距,如果圖片有不同的橫縱比,小的補距將導致更多的剪裁以適合設置的ImageView的高度和寬度。

如果View傳到getView()不是空的,則本地的ImageView初始化時將循環再用View對象。在getView()方法末尾,position整數傳入setImageResource()方法以從mThumbIds數組中選擇圖片。

7.     標籤佈局(Tab Layout)

標籤佈局:是一個ViewGroup以標籤的方式顯示它的子視圖(view)元素,就像在Firefox中的一個窗口中顯示多個網頁一樣。

爲了創建一個標籤UI(tabbed UI),需要使用到TabHost和TabWidget。TabHost必須是佈局的根節點,它包含爲了顯示標籤的TabWidget和顯示標籤內容的FrameLayout

可以有兩種方式實現標籤內容:使用標籤在同一個活動中交換視圖、使用標籤在完全隔離的活動之間改變。根據你的需要,選擇不同的方式,但是如果每個標籤提供不同的用戶活動,爲每個標籤選擇隔離的活動,因此你可以更好地以分離的組管理應用程序,而不是一個巨大的應用程序和佈局。下面還有一個例子來創建一個標籤UI,每個標籤使用隔離的活動。

TabHost要求包含一個TabWidget和一個FrameLayout。TabWidget和FrameLayoutTabHost以線性垂直地顯示。

TabHost的引用第一次通過getTabHost()獲取。然後,爲每個標籤,創建TabHost.TabSpec定義標籤的屬性。newTabSpec(String)方法創建一個新的TabHost.TabSpec以給定的字符串標識標籤。調用TabHost.TabSpec, setIndicator(CharSequence, Drawable)爲每個標籤設置文字和圖標,調用setContent(Intent)指定Intent去打開合適的活動。每個TabHost.TabSpec通過調用addTab(TabHost.TabSpec)添加到TabHost。

 

8.     絕對佈局(AbsoluteLayout)

絕對佈局:是一個ViewGroup以絕對方式顯示它的子視圖(view)元素,即以座標的方式來定位在屏幕上位置。

這種佈局方式很好理解,在佈局文件或編程地設置View的座標,從而絕對地定位。

 

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