Android include, merge, ViewStub詳解

參考:http://blog.csdn.net/xyz_lmn/article/details/14524567

布局優(yōu)化的時(shí)候經(jīng)常用到的三種方式

  • include
  • merge
  • ViewStub

1桦卒、<include />標(biāo)簽重用布局

include標(biāo)簽?zāi)軌蛑赜靡讯x好的布局
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:gravity="center"
              android:orientation="vertical">

    <TextView
        android:id="@+id/id_text_1"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <include
        android:id="@+id/id_text_2"
        layout="@layout/layout_1"
        android:layout_width="match_parent"
        android:layout_height="0"
        android:layout_weight="0.5"/>

</LinearLayout>
重用的布局layout_1
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
              android:id="@+id/id_reuse_layout"
              android:layout_width="match_parent"
              android:layout_height="match_parent"
              android:gravity="center"
              android:orientation="vertical">

    <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"/>

    <include layout="@layout/嵌套的其他重用布局"/>

</LinearLayout>
1)必須聲明一個(gè)layout屬性,值為重用的布局
2)可以聲明其他屬性屑宠,include中聲明的id會(huì)覆蓋重用布局中的id

eg:上面的代碼中id_text_2會(huì)覆蓋id_reuse_layout

3)可以使用全部的android:layout_*屬性,必須聲明android:layout_width和android:layout_height屬性

eg:上面的布局中weight生效的前提是width和height屬性必須聲明

4)可以嵌套使用

2、<merge />標(biāo)簽減少視圖層級(jí)

<merge/>標(biāo)簽在UI的結(jié)構(gòu)優(yōu)化中起著非常重要的作用,它可以刪減多余的層級(jí)呀闻,優(yōu)化UI。<merge/>多用于替換當(dāng)一個(gè)布局包含另一個(gè)布局時(shí)萍启,<merge/>標(biāo)簽消除視圖層次結(jié)構(gòu)中多余的層級(jí)。例如你的主布局文件是垂直布局屏鳍,引入了一個(gè)垂直布局的include勘纯,這是如果include布局使用的LinearLayout就沒(méi)意義了,使用的話反而減慢你的UI表現(xiàn)钓瞭。這時(shí)可以使用<merge/>標(biāo)簽優(yōu)化驳遵。
<merge xmlns:android="http://schemas.android.com/apk/res/android">  
  
    <Button  
        android:layout_width="fill_parent"   
        android:layout_height="wrap_content"  
        android:text="@string/add"/>  
  
    <Button  
        android:layout_width="fill_parent"   
        android:layout_height="wrap_content"  
        android:text="@string/delete"/>  
  
</merge> 
現(xiàn)在添加該布局時(shí)(使用<include />標(biāo)簽),系統(tǒng)忽略<merge />層并且直接添加兩個(gè)Button到你的布局中山涡。

3堤结、<ViewStub />標(biāo)簽占位

<ViewStub />標(biāo)簽最大的優(yōu)點(diǎn)是當(dāng)你需要時(shí)才會(huì)加載,使用他并不會(huì)影響UI初始化時(shí)的性能鸭丛。各種不常用的布局想進(jìn)度條竞穷、顯示錯(cuò)誤消息等可以使用<ViewStub />標(biāo)簽,以減少內(nèi)存使用量鳞溉,加快渲染速度瘾带。<ViewStub />是一個(gè)不可見(jiàn)的,大小為0的View熟菲。
<ViewStub  
        android:id="@+id/stub_import"  
        android:layout="@layout/progress_overlay"  
        android:layout_width="match_parent"  
        android:layout_height="wrap_content" />  
當(dāng)你想加載布局時(shí)看政,可以使用下面其中一種方法:
((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE);  
// or  
View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate();
當(dāng)調(diào)用inflate()函數(shù)的時(shí)候,ViewStub被引用的資源替代抄罕,并且返回引用的view允蚣。 這樣程序可以直接得到引用的view而不用再次調(diào)用函數(shù)findViewById()來(lái)查找了。

注:ViewStub目前有個(gè)缺陷就是還不支持 <merge /> 標(biāo)簽呆贿。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末嚷兔,一起剝皮案震驚了整個(gè)濱河市,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌谴垫,老刑警劉巖章母,帶你破解...
    沈念sama閱讀 216,470評(píng)論 6 501
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異翩剪,居然都是意外死亡乳怎,警方通過(guò)查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,393評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門前弯,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)蚪缀,“玉大人,你說(shuō)我怎么就攤上這事恕出⊙叮” “怎么了?”我有些...
    開(kāi)封第一講書人閱讀 162,577評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵浙巫,是天一觀的道長(zhǎng)金蜀。 經(jīng)常有香客問(wèn)我,道長(zhǎng)的畴,這世上最難降的妖魔是什么渊抄? 我笑而不...
    開(kāi)封第一講書人閱讀 58,176評(píng)論 1 292
  • 正文 為了忘掉前任,我火速辦了婚禮丧裁,結(jié)果婚禮上护桦,老公的妹妹穿的比我還像新娘。我一直安慰自己煎娇,他們只是感情好二庵,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,189評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著缓呛,像睡著了一般催享。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上哟绊,一...
    開(kāi)封第一講書人閱讀 51,155評(píng)論 1 299
  • 那天睡陪,我揣著相機(jī)與錄音,去河邊找鬼匿情。 笑死兰迫,一個(gè)胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的炬称。 我是一名探鬼主播汁果,決...
    沈念sama閱讀 40,041評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼玲躯!你這毒婦竟也來(lái)了据德?” 一聲冷哼從身側(cè)響起鳄乏,我...
    開(kāi)封第一講書人閱讀 38,903評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎棘利,沒(méi)想到半個(gè)月后橱野,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,319評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡善玫,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,539評(píng)論 2 332
  • 正文 我和宋清朗相戀三年水援,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片茅郎。...
    茶點(diǎn)故事閱讀 39,703評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡蜗元,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出系冗,到底是詐尸還是另有隱情奕扣,我是刑警寧澤,帶...
    沈念sama閱讀 35,417評(píng)論 5 343
  • 正文 年R本政府宣布掌敬,位于F島的核電站惯豆,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏奔害。R本人自食惡果不足惜楷兽,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,013評(píng)論 3 325
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望舀武。 院中可真熱鬧拄养,春花似錦离斩、人聲如沸银舱。這莊子的主人今日做“春日...
    開(kāi)封第一講書人閱讀 31,664評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)寻馏。三九已至,卻和暖如春核偿,著一層夾襖步出監(jiān)牢的瞬間诚欠,已是汗流浹背。 一陣腳步聲響...
    開(kāi)封第一講書人閱讀 32,818評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工漾岳, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留轰绵,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,711評(píng)論 2 368
  • 正文 我出身青樓尼荆,卻偏偏與公主長(zhǎng)得像左腔,于是被迫代替她去往敵國(guó)和親。 傳聞我的和親對(duì)象是個(gè)殘疾皇子捅儒,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,601評(píng)論 2 353

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