Android 動(dòng)態(tài)添加布局的兩種方式

前言

大多數(shù)時(shí)候我們布局都是用xml來(lái)布局的,但有些時(shí)候也是會(huì)用到動(dòng)態(tài)布局的憨颠,尤其是在一些大項(xiàng)目中胖翰,動(dòng)態(tài)布局更是體現(xiàn)的淋漓盡致帕膜。
所以今天我們就來(lái)學(xué)習(xí)一些動(dòng)態(tài)加添布局的兩種方式,分別是

  • 動(dòng)態(tài)添加xml布局

    • 另外寫一個(gè)xml布局拦宣,然后通過(guò)java的方式讓他加載他主布局上
  • 動(dòng)態(tài)添加java布局

    • 通過(guò)java寫出一個(gè)布局截粗,然后再通過(guò)java的方式讓他加載他主布局上

一、動(dòng)態(tài)添加xml布局

步驟

第一步構(gòu)造容器

LinearLayout.LayoutParams lp = new LinearLayout.LayoutParams(   
                    LayoutParams.FILL_PARENT, LayoutParams.WRAP_CONTENT); 
第二步構(gòu)造xml文件

這里我們就主布局添加個(gè)button就可以了鸵隧,用來(lái)點(diǎn)擊加載xml布局绸罗,被添加布局里面我就寫一個(gè)TextView,由于比較簡(jiǎn)單這里就不貼了

第三步構(gòu)造LayoutInflater

提到addview豆瘫,首先要了解一下LayoutInflater類珊蟀。這個(gè)類最主要的功能就是實(shí)現(xiàn)將xml表述的layout轉(zhuǎn)化為View的功能。為了便于理解外驱,我們可以將它與findViewById()作一比較育灸,二者都是實(shí)例化某一對(duì)象,不同的是findViewById()是找xml布局文件下的具體widget控件實(shí)例化昵宇,而LayoutInflater找res/layout/下的xml布局文件來(lái)實(shí)例化的磅崭。

而LayoutInflater有三種方式

LayoutInflater inflater=(LayoutInflater)context.getSystemService(Context.LAYOUT_INFLATER_SERVICE);或

LayoutInflater inflater = LayoutInflater.from(Activity.this);或

LayoutInflater inflater = getLayoutInflater();

這三種方法本質(zhì)是相同的。

第四步inflate()加載布局

用LayoutInflater.inflate() 將LayOut文件轉(zhuǎn)化成VIew趟薄。

View view = inflater.inflate(R.layout.block_gym_album_list_item, null);
this.addContentView(view,lp);

關(guān)于第一步顯示布局的詳細(xì)介紹

改變布局主要是通過(guò)改變LayoutParams來(lái)實(shí)現(xiàn)的绽诚,LayoutParams繼承于Android.View.ViewGroup.LayoutParams。它相當(dāng)于一個(gè)Layout的信息包,封裝了Layout的位置恩够、高卒落、寬等信息。需要注意的是蜂桶,需要注意到要修改的View的父容器是什么類型的儡毕,F(xiàn)rameLayout,LinearLayout扑媚,RelativeLayout等腰湾,因?yàn)椴煌愋偷腖ayoutParams是不同的。

上述代碼與以下xml布局代碼作用相同:

<LinearLayout>
        <View
                  android:layout_width="wrap_content"
                  android:layout_height="wrap_content"
                  android:layout_centerInParent="true"/>
</LinearLayout>

改變布局位置

addRule可傳入不同的布局參數(shù)疆股,如addRule(RelativeLayout.BELOW, R.id.XXX); 表示該View位于XXX下面费坊。常用的布局參數(shù)有以下:

layoutParams.alignWithParent = true  如果對(duì)應(yīng)的兄弟元素找不到的話就以父元素做參照物
RelativeLayout.CENTER_HORIZONTAL   在父控件中水平居中
RelativeLayout.CENTER_VERTICAL   在父控件中垂直居中
RelativeLayout.CENTER_IN_PARENT  相對(duì)于父控件完全居中
RelativeLayout.ALIGN_PARENT_BOTTOM  緊貼父控件的下邊緣
RelativeLayout.ALIGN_PARENT_TOP  緊貼父控件的上邊緣
RelativeLayout.ALIGN_PARENT_LEFT緊貼父控件的左邊邊緣
RelativeLayout.ALIGN_PARENT_RIGHT  緊貼父控件的右邊緣
RelativeLayout.ABOVE 在某元素的上方  需要第二個(gè)參數(shù)為某元素的ID
RelativeLayout.BELOW 在某元素的下方 需要第二個(gè)參數(shù)為某元素的ID
RelativeLayout.LEFT_OF 在某元素的左邊 需要第二個(gè)參數(shù)為某元素的ID
RelativeLayout.RIGHT_OF  在某元素的右邊 需要第二個(gè)參數(shù)為 某元素的ID
RelativeLayout.ALIGN_TOP 本元素的上邊緣和某元素的的上邊緣對(duì)齊 需要第二個(gè)參數(shù)為某元素的ID
RelativeLayout.ALIGN_BOTTOM 本元素的上邊緣和某元素的的下邊緣對(duì)齊 需要第二個(gè)參數(shù)為某元素的ID
RelativeLayout.ALIGN_LEFT  本元素的上邊緣和某元素的的左邊緣對(duì)齊 需要第二個(gè)參數(shù)為某元素的ID
RelativeLayout.ALIGN_RIGHT  本元素的上邊緣和某元素的的右邊緣對(duì)齊 需要第二個(gè)參數(shù)為某元素的ID
RelativeLayout.ALIGN_BASELINE   本元素的基線和某元素的的基線對(duì)齊 需要第二個(gè)參數(shù)為某元素的ID

二、動(dòng)態(tài)添加java布局

我們這里還是以TextView為例旬痹,其實(shí)動(dòng)態(tài)添加java布局和xml布局有異曲同工之處附井,無(wú)非就是用java的方式寫出控件,然后添加進(jìn)布局里

第一步構(gòu)造容器

和上面xml布局的一樣两残,所以這里就不貼了

第二步構(gòu)造控件布局框架

其實(shí)和xml的第二步也是一樣的永毅,只不過(guò)xml已經(jīng)寫好了最外層的布局,所以我們也要用java寫出一個(gè)布局人弓,好在里面放控件

LinearLayout view = new LinearLayout(this); 
        view.setLayoutParams(lp);//設(shè)置布局參數(shù) 
        view.setOrientation(LinearLayout.HORIZONTAL);// 設(shè)置子View的Linearlayout// 為垂直方向布局 
        //定義子View中兩個(gè)元素的布局 
        ViewGroup.LayoutParams vlp = new ViewGroup.LayoutParams( 
                ViewGroup.LayoutParams.WRAP_CONTENT, 
                ViewGroup.LayoutParams.WRAP_CONTENT); 

第三步添加控件

其實(shí)這一步也沒(méi)有什么好講的沼死,就是xml添加控件的方式改成java添加

TextView tv1 = new TextView(this); 
        tv1.setLayoutParams(vlp);//設(shè)置TextView的布局 
        tv1.setText("姓名:");

第四部將控件添加至容器

 view.addView(tv1);//將TextView 添加到子View 中 
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市崔赌,隨后出現(xiàn)的幾起案子意蛀,更是在濱河造成了極大的恐慌,老刑警劉巖峰鄙,帶你破解...
    沈念sama閱讀 206,839評(píng)論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件浸间,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡吟榴,警方通過(guò)查閱死者的電腦和手機(jī)魁蒜,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,543評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)吩翻,“玉大人兜看,你說(shuō)我怎么就攤上這事∠料梗” “怎么了细移?”我有些...
    開(kāi)封第一講書人閱讀 153,116評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)熊锭。 經(jīng)常有香客問(wèn)我弧轧,道長(zhǎng)雪侥,這世上最難降的妖魔是什么? 我笑而不...
    開(kāi)封第一講書人閱讀 55,371評(píng)論 1 279
  • 正文 為了忘掉前任精绎,我火速辦了婚禮速缨,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘代乃。我一直安慰自己旬牲,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,384評(píng)論 5 374
  • 文/花漫 我一把揭開(kāi)白布搁吓。 她就那樣靜靜地躺著原茅,像睡著了一般。 火紅的嫁衣襯著肌膚如雪堕仔。 梳的紋絲不亂的頭發(fā)上擂橘,一...
    開(kāi)封第一講書人閱讀 49,111評(píng)論 1 285
  • 那天,我揣著相機(jī)與錄音贮预,去河邊找鬼贝室。 笑死契讲,一個(gè)胖子當(dāng)著我的面吹牛仿吞,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播捡偏,決...
    沈念sama閱讀 38,416評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼唤冈,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了银伟?” 一聲冷哼從身側(cè)響起你虹,我...
    開(kāi)封第一講書人閱讀 37,053評(píng)論 0 259
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎彤避,沒(méi)想到半個(gè)月后傅物,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 43,558評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡琉预,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,007評(píng)論 2 325
  • 正文 我和宋清朗相戀三年董饰,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片圆米。...
    茶點(diǎn)故事閱讀 38,117評(píng)論 1 334
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡卒暂,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出娄帖,到底是詐尸還是另有隱情也祠,我是刑警寧澤,帶...
    沈念sama閱讀 33,756評(píng)論 4 324
  • 正文 年R本政府宣布近速,位于F島的核電站诈嘿,受9級(jí)特大地震影響堪旧,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜奖亚,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,324評(píng)論 3 307
  • 文/蒙蒙 一崎场、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧遂蛀,春花似錦谭跨、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 30,315評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至所坯,卻和暖如春谆扎,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背芹助。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 31,539評(píng)論 1 262
  • 我被黑心中介騙來(lái)泰國(guó)打工堂湖, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人状土。 一個(gè)月前我還...
    沈念sama閱讀 45,578評(píng)論 2 355
  • 正文 我出身青樓无蜂,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親蒙谓。 傳聞我的和親對(duì)象是個(gè)殘疾皇子斥季,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,877評(píng)論 2 345

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