Android XML布局詳解(轉(zhuǎn)載)

Android XML布局詳解

2014-01-02 15:55:34|??分類:android|??標(biāo)簽:androidxml布局詳解|舉報(bào)|字號訂閱

下載LOFTER我的照片書??|

Android XML布局詳解 - XML Layouts

XML布局作為用戶界面直接作用顯示在Activity(活動(dòng)五督、界面)上铅歼。它定義了布局結(jié)構(gòu)换薄,并把所有在布局里的元素顯示給用戶,可以在兩個(gè)方面聲明你的布局:

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

在代碼里動(dòng)態(tài)的實(shí)例化布局元素:在運(yùn)行的代碼里你可以創(chuàng)建視圖View和View Group诸蚕,也可以給它們制定對應(yīng)的屬性,不如高度寬度等。

Android框架提供了這兩種定義布局的方式氧猬,你可以非常靈活的運(yùn)用它們背犯。比如,你可以在xml文件里聲明你的界面元素盅抚,你也可以在代碼里修改這些界面元素媳板。

在你的應(yīng)用程序里用XML文件定義布局你可以更好的將對UI元素的控制和你的邏輯代碼分離。你的UI描述在你的程序之外泉哈,這就意味著你可以獨(dú)立的修改重新適配這些界面元素而不必重新編譯和修改你的代碼蛉幸。例如:你可以創(chuàng)建不同屏幕大小破讨、方向、語言的XML布局文件奕纫,此外提陶,在XML文件里聲明布局讓你的UI更加可視化、形象化匹层,更容易控制調(diào)試界面問題隙笆。當(dāng)然這個(gè)文檔的重點(diǎn)是教你如何在XML文件里定義布局界面。如果你對在代碼中定義View對象有興趣的話升筏,你可以參考ViewGroup和View類撑柔。

通常情況下,在XML文件中聲明UI元素的詞匯和命名類您访、構(gòu)造方法的名字緊密相關(guān)铅忿。其中元素的名字對應(yīng)類的名字,屬性的名字對應(yīng)方法的名字灵汪。在實(shí)際中這種對應(yīng)關(guān)系非常直接檀训,甚至你可以直接猜到在XML屬性對應(yīng)類的那個(gè)方法,哪個(gè)類對應(yīng)XML中的元素享言。也有一些輕微的差異峻凫,比如EditText元素有一個(gè)text屬性,對應(yīng)的是EditText.setText()方法览露。

寫XML布局文件 -Write the XML

android提供一系列的嵌套元素荧琼,你可以用像創(chuàng)建html文件的方式來使用這些元素,用Android的XML元素差牛,你可以非趁螅快的設(shè)計(jì)你的UI布局和它們所包含的屏幕元素。

每個(gè)布局文件必須包含一個(gè)根元素多糠,它必須是一個(gè)View或ViewGroup對象累舷。如果你定義的根元素,你可以在它內(nèi)部添加其他的布局對象或者部件來作為它的子元素夹孔,逐步建立一個(gè)視圖層次結(jié)構(gòu)定義到你的根布局中被盈。例如,這里是一個(gè)XML布局搭伤,使用一個(gè)垂直的LinearLayout其中包含一個(gè)TextView和一個(gè)Button:


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

加載XMl布局 -Load the XML Resource

當(dāng)您編譯您的應(yīng)用程序身堡,每個(gè)XML布局文件被編譯成一個(gè)視圖資源。您應(yīng)該從您的應(yīng)用程序代碼加載布局資源拍鲤,在您的Activity.onCreate()回調(diào)方法中實(shí)現(xiàn)贴谎。通過調(diào)用setContentView()汞扎,傳遞給它的參考布局資源的形式:例如如果你XML布局作為main_layout.xml保存的,加載它擅这,像這樣:

public void onCreate(Bundle savedInstanceState)

{

super.onCreate(savedInstanceState);

setContentView(R.layout.main_layout);

}

在你的程序運(yùn)行是澈魄,onCreate方法會(huì)被回調(diào),詳細(xì)你可以看一下Activity的生命周期仲翎。

屬性-Attributes

每個(gè)View和ViewGroup對象都有對應(yīng)的屬性痹扇。有些屬性只支持自己的View對象(例如,TextView的的TEXTSIZE屬性只是TextView可以使用)溯香,有些屬性是共有的鲫构,比如id屬性,因?yàn)樗鼈兪菑母鵙iew類繼承的玫坛。還比如有些屬性被認(rèn)為是“布局參數(shù)”结笨,就是描述View對象的某些布局方向,由該對象的父ViewGroup對象定義的屬性也是公用的昂秃。

ID

在View的視圖樹里禀梳,每一個(gè)View視圖都有一個(gè)整數(shù)的唯一標(biāo)識ID和它相關(guān)聯(lián)杜窄。就是說肠骆,每一個(gè)View都有一個(gè)唯一的標(biāo)識ID。這個(gè)ID的引用是一個(gè)整數(shù)塞耕。在XML文件里這個(gè)ID通常被制定成字符串蚀腿,這個(gè)ID屬性被View的所有視圖所共有,就是說在所有的控件里都有這個(gè)屬性扫外,你會(huì)經(jīng)常的使用它莉钙,在XML文件里id標(biāo)簽的語法是:

android:id="@+id/my_button"

在字符串開頭的@符號表示,XML解析器應(yīng)該把后邊的字符串作為一個(gè)ID來解析和擴(kuò)展筛谚。+號表示磁玉,這是一個(gè)新的ID并且需要把這個(gè)ID的引用放到資源R.java文件里。也有一些資源是android框架提供的驾讲,當(dāng)你需要引用android框架提供的資源時(shí)蚊伞,你并不需要添加其他的符號,但你必須你提供android包的命名空間例如:

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

在Android包命名空間的地方吮铭,我們現(xiàn)在引用從android.R資源類的ID时迫,而不是當(dāng)?shù)氐馁Y源類。既再導(dǎo)入包的時(shí)候我們需要導(dǎo)入android.R資源的ID谓晌。創(chuàng)建Views并在程序中引用它們掠拳,常用的模式是:

1、定義一個(gè)視圖或者控件纸肉,并給它一個(gè)唯一的標(biāo)識ID

2溺欧、創(chuàng)建一個(gè)View實(shí)例對象喊熟,并從布局文件中獲得它(一般在onCreate方法里獲得).

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

在一個(gè)RelativeLayout布局里,指定View的ID是非常重要的胧奔。因?yàn)樵赗elativeLayout布局中逊移,同級的View可以相對另一個(gè)同級的View的位置定義,這就需要另一個(gè)view提供唯一的表示ID龙填。一個(gè)ID在整個(gè)項(xiàng)目中可能定義的不是唯一的胳泉,但是必須保證在一個(gè)xml文件里定義是唯一的,最好的就是在整個(gè)項(xiàng)目中定義的ID是唯一的岩遗。

布局參數(shù)

XML布局屬性layout_something被定義為布局參數(shù)扇商,它們被View和ViewGroup所恰當(dāng)?shù)谋A簟C縑iewGroup的類實(shí)現(xiàn)一個(gè)嵌套類擴(kuò)展ViewGroup.LayoutParams的宿礁。這個(gè)子類包含的屬性類型定義為每個(gè)子視圖的大小和位置案铺,作適當(dāng)?shù)囊晥D組。正如你可以看到下圖中梆靖,父視圖組定義為每個(gè)子視圖(包括子視圖組)的布局參數(shù)控汉。

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

圖片介紹:可視化的視圖層次的每個(gè)視圖的布局參數(shù)

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

所有的視圖組包括一個(gè)寬度和高度(layout_width和layout_height)测僵,每個(gè)視圖需要定義它們街佑。許多的LayoutParams也包括可選的邊距和邊框。您可以指定寬度和高度精確的值捍靠。大部分您將使用這些常量類設(shè)置寬度或高度:wrap_content其內(nèi)容所需的尺寸大小本身沐旨。fill_parent(API等級8改名為match_parent,與它的父視圖組一樣大榨婆。在一般情況下磁携,不建議指定一個(gè)布局使用絕對單位,如像素的寬度和高度良风。相反谊迄,推薦采用相對測量,如獨(dú)立的像素密度單位(DP)拖吼,wrap_content鳞上,或fill_parent,因?yàn)樗兄诖_保您的應(yīng)用程序?qū)⒃诟鞣N設(shè)備的屏幕尺寸顯示正確吊档。

布局位置

一個(gè)View的幾何形狀是一個(gè)矩形篙议。每一個(gè)view的位置都可以用一個(gè)坐標(biāo)和兩個(gè)尺寸所表示,一個(gè)坐標(biāo)指的是相對最左邊和相對最頂部的兩個(gè)點(diǎn),兩個(gè)尺寸是指它的高度和寬度鬼贱。位置和尺寸的單位都是像素移怯。可以調(diào)用視圖的方法來獲得它的位置这难, getLeft() 返回左側(cè)的或者X的坐標(biāo)舟误,getTop()返回頂部或者Y的坐標(biāo)。這兩個(gè)方法返回的位置都是相對于它的父容器的位置姻乓。例如當(dāng)getLeft()返回20的時(shí)候嵌溢,說明這個(gè)view相對于它的父容器的最左邊邊緣20像素的位置。此外還提供了getRight(),getBottom()方法來滿足一些其他的計(jì)算蹋岩,調(diào)用getRight()時(shí)類似與getLeft()的計(jì)算赖草。

大小、填充剪个、邊距

view的大小即view的寬度和高度的大小秧骑,一個(gè)view其實(shí)擁有兩對值的大小。第一對稱為衡量高度和衡量寬度扣囊,定義的值的要在其父容器內(nèi)乎折,可以通過調(diào)用getMeasuredWidth()和getMeasuredHeight()得到它的值。第二對簡單地稱為寬度和高度或有時(shí)繪制的寬度和繪制的高度侵歇,這些值的定義要以實(shí)際屏幕的大小來看骂澄,寬度和高度可以通

過調(diào)用getWidth()和getHeight()獲得。填充表示像素的左盒至,前酗洒,右下方的視野士修。舉一個(gè)例子讓你明白大小枷遂、填充、邊距的關(guān)系的區(qū)別棋嘲。場景 畫室里展覽的多幅字畫酒唉。這些字畫就想我們程序里的view,每一個(gè)字畫都有它的長度和寬度沸移,既自己本身的大小痪伦,字畫都有木頭的裝潢,字畫本身距離這個(gè)裝潢的距離雹锣,既padding填充网沾,padding也有上下左右方向,你可以設(shè)置不同的值蕊爵,每一個(gè)字畫都距離另外的字畫有一定的距離辉哥,這個(gè)距離既邊距,既magin,magin也有自己的上下左右方向醋旦,你同樣可以制定其值恒水。

更多參考:

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

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市饲齐,隨后出現(xiàn)的幾起案子钉凌,更是在濱河造成了極大的恐慌,老刑警劉巖捂人,帶你破解...
    沈念sama閱讀 211,561評論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件御雕,死亡現(xiàn)場離奇詭異,居然都是意外死亡滥搭,警方通過查閱死者的電腦和手機(jī)饮笛,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,218評論 3 385
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來论熙,“玉大人福青,你說我怎么就攤上這事∨Ч睿” “怎么了无午?”我有些...
    開封第一講書人閱讀 157,162評論 0 348
  • 文/不壞的土叔 我叫張陵,是天一觀的道長祝谚。 經(jīng)常有香客問我宪迟,道長,這世上最難降的妖魔是什么交惯? 我笑而不...
    開封第一講書人閱讀 56,470評論 1 283
  • 正文 為了忘掉前任次泽,我火速辦了婚禮,結(jié)果婚禮上席爽,老公的妹妹穿的比我還像新娘意荤。我一直安慰自己,他們只是感情好只锻,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,550評論 6 385
  • 文/花漫 我一把揭開白布玖像。 她就那樣靜靜地躺著,像睡著了一般齐饮。 火紅的嫁衣襯著肌膚如雪捐寥。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,806評論 1 290
  • 那天祖驱,我揣著相機(jī)與錄音握恳,去河邊找鬼。 笑死捺僻,一個(gè)胖子當(dāng)著我的面吹牛乡洼,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 38,951評論 3 407
  • 文/蒼蘭香墨 我猛地睜開眼就珠,長吁一口氣:“原來是場噩夢啊……” “哼寇壳!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起妻怎,我...
    開封第一講書人閱讀 37,712評論 0 266
  • 序言:老撾萬榮一對情侶失蹤壳炎,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后逼侦,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體匿辩,經(jīng)...
    沈念sama閱讀 44,166評論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,510評論 2 327
  • 正文 我和宋清朗相戀三年榛丢,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了铲球。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,643評論 1 340
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡晰赞,死狀恐怖稼病,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情掖鱼,我是刑警寧澤然走,帶...
    沈念sama閱讀 34,306評論 4 330
  • 正文 年R本政府宣布,位于F島的核電站戏挡,受9級特大地震影響芍瑞,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜褐墅,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,930評論 3 313
  • 文/蒙蒙 一拆檬、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧妥凳,春花似錦竟贯、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,745評論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽噪珊。三九已至晌缘,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間痢站,已是汗流浹背磷箕。 一陣腳步聲響...
    開封第一講書人閱讀 31,983評論 1 266
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留阵难,地道東北人岳枷。 一個(gè)月前我還...
    沈念sama閱讀 46,351評論 2 360
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親空繁。 傳聞我的和親對象是個(gè)殘疾皇子殿衰,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,509評論 2 348

推薦閱讀更多精彩內(nèi)容