【Android】佈局優化

1、<viewStub />

在使用普通的view時,把View的初始可見View.GONE但是在Inflate佈局的時候View仍然會被Inflate,也就是說仍然會創建對象,會被實例化,會被設置屬性。也就是說,會耗費內存等資源。

使用viewStub,在Inflate佈局的時候,只有ViewStub會被初始化,然後當ViewStub被設置爲可見的時候,或是調用了ViewStub.inflate()的時候,ViewStub所向的佈局就會被Inflate和實例化,然後ViewStub的佈局屬性都會傳給它所指向的佈局。這樣,就可以使用ViewStub來方便的在運行時,要還是不要顯示某個佈局。

  • ViewStub只能Inflate一次,之後ViewStub對象會被置爲空。按句話說,某個被ViewStub指定的佈局被Inflate後,就不會夠再通過ViewStub來控制它了。
  • ViewStub只能用來Inflate一個佈局文件,而不是某個具體的View,當然也可以把View寫在某個佈局文件中。
  •  在程序的運行期間,某個佈局在Inflate後,就不會有變化,除非重新啓動。 因爲ViewStub只能Inflate一次,之後會被置空,所以無法指望後面接着使用ViewStub來控制佈局。所以當需要在運行時不止一次的顯示和隱藏某個佈局,那麼ViewStub是做不到的。這時就只能使用View的可見性來控制了。
  •  想要控制顯示與隱藏的是一個佈局文件,而非某個View。因爲設置給ViewStub的只能是某個佈局文件的Id,所以無法讓它來控制某個View。
  • 如果想要控制某個View(如Button或TextView)的顯示與隱藏,或者想要在運行時不斷的顯示與隱藏某個佈局或View,只能使用View的可見性來控制。

2、<merge />

使用merge嵌入其他的layout時,相當於merge的子佈局直接放在嵌入的地方(節省了一級嵌套),配合include的標籤一起使用,非常實用

  • <merge />只能作爲XML佈局的根標籤使用
  •  當Inflate以<merge />開頭的佈局文件時,必須指定一個父ViewGroup,並且必須設定attachToRoot爲true(參看inflate(int, android.view.ViewGroup, Boolean)方法)。

3、<include />

可以將一個佈局文件嵌套進另一個佈局文件中,提高了layout的複用,作爲include對象(常被嵌套的佈局)根標籤最好用merge。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章