深入淺出談Android 幾種布局方式

2021-06-02 11:03:57 字數 3682 閱讀 3121

我們對android應用程式執行原理及布局檔案可謂有了比較深刻的認識和理解,並且用「hello world!」程式來實踐證明了。在繼續深入android開發之旅之前,有必要解決前兩篇中沒有介紹的遺留問題:view的幾種布局顯示方法,以後就不會在針對布局方面做過多的介紹。

view的布局顯示方式有下面幾種:線性布局(linear layout)、相對布局(relative layout)、**布局(table layout)、網格檢視(grid view)、標籤布局(tab layout)、列表檢視(list view)、絕對布局(absolutelayout)幀布局(frame layout)。

本文雖然是介紹view的布局方式,但不僅僅是這樣,其中涉及了很多小的知識點,絕對能給你帶來android大餐!

1、view布局概述

2、線性布局(linear layout)

2.1、tips:android:layout_weight="1"

3、相對布局(relative layout)

4、**布局(table layout)

5、列表檢視(list view)

5.1、乙個小的改進

5.2、補充說明

6、網格檢視(grid view)

7 、絕對布局()

8、標籤布局(tab layout)

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的屬性(參加上篇的4.2節)。我們要介紹的view的布局方式的類,都是直接或間接繼承自viewgroup類,如下圖所示:

檢視層次

其實,所有的布局方式都可以歸類為viewgroup的5個類別,即viewgroup的5個直接子類。其它的一些布局都擴充套件自這5個類。下面分小節分別介紹view的七種布局顯示方式。

2、線性布局(linear layout)

線性布局:是乙個viewgroup以線性方向顯示它的子檢視(view)元素,即垂直地或水平地。之前我們的hello world!程式中view的布局方式就是線性布局的,一定不陌生!如下所示res/layour/main.xml:

<?xml version="1.0" encoding="utf-8"?>

從上面可以看出根linearlayout檢視組(viewgroup)包含4個元件,它的子元素是以線性方式(horizontal,水平的)布局,執行效果如下圖所示

線性布局

如果你在android:orientation="horizontal"設定為vertical,則是是垂直或者說是縱向的,如下圖所示:

縱向布局

2.1、tips:android:layout_weight="1"

這個屬性很關鍵,如果你沒有顯示設定它,它預設為0。把上面布局檔案(水平顯示的那個)中的這個屬性都去掉,執行會得出如下結果:

加 android:layout_weight="1" 屬性的效果

*****=

沒有了這個屬性,我們本來定義的5個button執行後卻只顯示了2個button,為什麼呢??

"weight"顧名思義是權重的意思,layout_weight 用於給乙個線性布局中的諸多檢視的重要程度賦值。所有的檢視都有乙個layout_weight值,預設為零,意思是需要顯示多大的檢視就佔據多大的螢幕空間。這就不難解釋為什麼會造成上面的情況了:button1~button5都設定了layout_height和layout_width屬性為wrap_content即包住文字內容,他們都沒有設定layout_weight 屬性,即預設為0.,這樣button1和button2根據需要的內容佔據了整個螢幕,別的就顯示不了啦!

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

3、相對布局(relative layout)

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

相對布局是設計使用者介面的有力工具,因為它消除了巢狀檢視組。如果你發現你使用了多個巢狀的linearlayout檢視組後,你可以考慮使用乙個relativelayout檢視組了。看下面的res/layour/main.xml:

<?xml version="1.0" encoding="utf-8"?>

從上面的布局檔案我們知道,relativelayout檢視組包含乙個textview、乙個editview、兩個button,注意標記了的屬性,在使用相對布局方式中就是使用這些類似的屬性來定位檢視到你想要的位置,它們的值是你參照的檢視的id。這些屬性的意思很簡單,就是英文單詞的直譯,就不多做介紹了。執行之後,得如下結果:

相對布局

*****=

4、 **布局(table layout)

**布局:是乙個viewgroup以**顯示它的子檢視(view)元素,即行和列標識乙個檢視的位置。其實android的**布局跟html中的**布局非常類似,tablerow 就像html**的標記。

用**布局需要知道以下幾點:

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

android:collapsecolumns,對應的方法:setcolumncollapsed(int,boolean),作用:設定**的列是否隱藏

android:stretchcolumns,對應的方法:setstretchallcolumns(boolean),作用:設定**的列是否拉伸

<?xml version="1.0" encoding="utf-8"?>

"

布局樣式如下:

**布局

深入淺出談GIS 測繪

首先我們通過對全球測繪地理資訊裝備產品 技術體系進行系統梳理,一起看看先進的空天地一體化對地觀測體系的測繪地理資訊裝備的生態鏈,見下圖 載波相位差分技術又稱rtk real time kinematic 技術,是實時處理兩個測站載波相位觀測量的差分方法。即是將基準站採集的載波相位發給使用者接收機,進...

深入淺出sizeof

int佔 位元組,short佔 位元組 1.0 回答下列問題 答案在文章末尾 1.sizeof char 2.sizeof a 3.sizeof a 4.strlen a 如果你答對了全部四道題,那麼你可以不用細看下面關於sizeof的論述。如果你答錯了部分題目,那麼就跟著我來一起 關於sizeof...

深入淺出ShellExecute

ipconfig c log.txt應如何處理?二樓的朋友,開啟拔號網路這樣 shellexecute null,open c windows rundll32.exe shell32.dll,control rundll c windows system telephon.cpl null,sw ...