Android XML布局詳解(轉載)

Android XML布局詳解

2014-01-02 15:55:34|??分類:android|??標簽:androidxml布局詳解|舉報|字號訂閱

下載LOFTER我的照片書??|

Android XML布局詳解 - XML Layouts

XML布局作為用戶界面直接作用顯示在Activity(活動、界面)上。它定義了布局結構,并把所有在布局里的元素顯示給用戶,可以在兩個方面聲明你的布局:

直接在XML文件里聲明你的UI元素:Android提供一個簡單的XML文件來對應界面要顯示的View和它的子類,比如一些工具控件按鈕、圖片和一些布局等。

在代碼里動態的實例化布局元素:在運行的代碼里你可以創建視圖View和View Group,也可以給它們制定對應的屬性,不如高度寬度等。

Android框架提供了這兩種定義布局的方式,你可以非常靈活的運用它們。比如,你可以在xml文件里聲明你的界面元素,你也可以在代碼里修改這些界面元素。

在你的應用程序里用XML文件定義布局你可以更好的將對UI元素的控制和你的邏輯代碼分離。你的UI描述在你的程序之外,這就意味著你可以獨立的修改重新適配這些界面元素而不必重新編譯和修改你的代碼。例如:你可以創建不同屏幕大小、方向、語言的XML布局文件,此外,在XML文件里聲明布局讓你的UI更加可視化、形象化,更容易控制調試界面問題。當然這個文檔的重點是教你如何在XML文件里定義布局界面。如果你對在代碼中定義View對象有興趣的話,你可以參考ViewGroup和View類。

通常情況下,在XML文件中聲明UI元素的詞匯和命名類、構造方法的名字緊密相關。其中元素的名字對應類的名字,屬性的名字對應方法的名字。在實際中這種對應關系非常直接,甚至你可以直接猜到在XML屬性對應類的那個方法,哪個類對應XML中的元素。也有一些輕微的差異,比如EditText元素有一個text屬性,對應的是EditText.setText()方法。

寫XML布局文件 -Write the XML

android提供一系列的嵌套元素,你可以用像創建html文件的方式來使用這些元素,用Android的XML元素,你可以非??斓脑O計你的UI布局和它們所包含的屏幕元素。

每個布局文件必須包含一個根元素,它必須是一個View或ViewGroup對象。如果你定義的根元素,你可以在它內部添加其他的布局對象或者部件來作為它的子元素,逐步建立一個視圖層次結構定義到你的根布局中。例如,這里是一個XML布局,使用一個垂直的LinearLayout其中包含一個TextView和一個Button:


為了使你的布局文件能夠正確的被編譯,除了你需要在XML文件里正確的定義你的布局之外,你還需要以.xml的后綴名來保存該文件,并把它放到android工程的res/layout目錄

加載XMl布局 -Load the XML Resource

當您編譯您的應用程序,每個XML布局文件被編譯成一個視圖資源。您應該從您的應用程序代碼加載布局資源,在您的Activity.onCreate()回調方法中實現。通過調用setContentView(),傳遞給它的參考布局資源的形式:例如如果你XML布局作為main_layout.xml保存的,加載它,像這樣:

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main_layout);

}

在你的程序運行是,onCreate方法會被回調,詳細你可以看一下Activity的生命周期。

屬性-Attributes

每個View和ViewGroup對象都有對應的屬性。有些屬性只支持自己的View對象(例如,TextView的的TEXTSIZE屬性只是TextView可以使用),有些屬性是共有的,比如id屬性,因為它們是從根View類繼承的。還比如有些屬性被認為是“布局參數”,就是描述View對象的某些布局方向,由該對象的父ViewGroup對象定義的屬性也是公用的。

ID

在View的視圖樹里,每一個View視圖都有一個整數的唯一標識ID和它相關聯。就是說,每一個View都有一個唯一的標識ID。這個ID的引用是一個整數。在XML文件里這個ID通常被制定成字符串,這個ID屬性被View的所有視圖所共有,就是說在所有的控件里都有這個屬性,你會經常的使用它,在XML文件里id標簽的語法是:

android:id="@+id/my_button"

在字符串開頭的@符號表示,XML解析器應該把后邊的字符串作為一個ID來解析和擴展。+號表示,這是一個新的ID并且需要把這個ID的引用放到資源R.java文件里。也有一些資源是android框架提供的,當你需要引用android框架提供的資源時,你并不需要添加其他的符號,但你必須你提供android包的命名空間例如:

android:id="@android:id/empty"

在Android包命名空間的地方,我們現在引用從android.R資源類的ID,而不是當地的資源類。既再導入包的時候我們需要導入android.R資源的ID。創建Views并在程序中引用它們,常用的模式是:

1、定義一個視圖或者控件,并給它一個唯一的標識ID

2、創建一個View實例對象,并從布局文件中獲得它(一般在onCreate方法里獲得).

Button myButton = (Button) findViewById(R.id.my_button);

在一個RelativeLayout布局里,指定View的ID是非常重要的。因為在RelativeLayout布局中,同級的View可以相對另一個同級的View的位置定義,這就需要另一個view提供唯一的表示ID。一個ID在整個項目中可能定義的不是唯一的,但是必須保證在一個xml文件里定義是唯一的,最好的就是在整個項目中定義的ID是唯一的。

布局參數

XML布局屬性layout_something被定義為布局參數,它們被View和ViewGroup所恰當的保留。每ViewGroup的類實現一個嵌套類擴展ViewGroup.LayoutParams的。這個子類包含的屬性類型定義為每個子視圖的大小和位置,作適當的視圖組。正如你可以看到下圖中,父視圖組定義為每個子視圖(包括子視圖組)的布局參數。

http://developer.android.com/images/layoutparams.png

圖片介紹:可視化的視圖層次的每個視圖的布局參數

請注意,每一個的LayoutParams子類有它自己的語法設定值。每個子元素必須定義相對它父類合適的LayoutParams,盡管它也可以為自己的子類定義不同的LayoutParams。

所有的視圖組包括一個寬度和高度(layout_width和layout_height),每個視圖需要定義它們。許多的LayoutParams也包括可選的邊距和邊框。您可以指定寬度和高度精確的值。大部分您將使用這些常量類設置寬度或高度:wrap_content其內容所需的尺寸大小本身。fill_parent(API等級8改名為match_parent,與它的父視圖組一樣大。在一般情況下,不建議指定一個布局使用絕對單位,如像素的寬度和高度。相反,推薦采用相對測量,如獨立的像素密度單位(DP),wrap_content,或fill_parent,因為它有助于確保您的應用程序將在各種設備的屏幕尺寸顯示正確。

布局位置

一個View的幾何形狀是一個矩形。每一個view的位置都可以用一個坐標和兩個尺寸所表示,一個坐標指的是相對最左邊和相對最頂部的兩個點,兩個尺寸是指它的高度和寬度。位置和尺寸的單位都是像素??梢哉{用視圖的方法來獲得它的位置, getLeft() 返回左側的或者X的坐標,getTop()返回頂部或者Y的坐標。這兩個方法返回的位置都是相對于它的父容器的位置。例如當getLeft()返回20的時候,說明這個view相對于它的父容器的最左邊邊緣20像素的位置。此外還提供了getRight(),getBottom()方法來滿足一些其他的計算,調用getRight()時類似與getLeft()的計算。

大小、填充、邊距

view的大小即view的寬度和高度的大小,一個view其實擁有兩對值的大小。第一對稱為衡量高度和衡量寬度,定義的值的要在其父容器內,可以通過調用getMeasuredWidth()和getMeasuredHeight()得到它的值。第二對簡單地稱為寬度和高度或有時繪制的寬度和繪制的高度,這些值的定義要以實際屏幕的大小來看,寬度和高度可以通

過調用getWidth()和getHeight()獲得。填充表示像素的左,前,右下方的視野。舉一個例子讓你明白大小、填充、邊距的關系的區別。場景 畫室里展覽的多幅字畫。這些字畫就想我們程序里的view,每一個字畫都有它的長度和寬度,既自己本身的大小,字畫都有木頭的裝潢,字畫本身距離這個裝潢的距離,既padding填充,padding也有上下左右方向,你可以設置不同的值,每一個字畫都距離另外的字畫有一定的距離,這個距離既邊距,既magin,magin也有自己的上下左右方向,你同樣可以制定其值。

更多參考:

http://www.dajo.com.cn/a/boke/anzhuo/2014/0101/257.html

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 230,048評論 6 542
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,414評論 3 429
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 178,169評論 0 383
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,722評論 1 317
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,465評論 6 412
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,823評論 1 328
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,813評論 3 446
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 43,000評論 0 290
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,554評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,295評論 3 358
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,513評論 1 374
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 39,035評論 5 363
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,722評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 35,125評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,430評論 1 295
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,237評論 3 398
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,482評論 2 379

推薦閱讀更多精彩內容