inflate和findViewById方法對比

2021-06-20 07:33:05 字數 1355 閱讀 1791

inflate()作用就是將xml定義的乙個布局找出來,但僅僅是找出來而且隱藏的,沒有找到的同時並顯示功能。最近做的乙個專案就是這一點讓我迷茫了好幾天。

android上還有乙個與inflate()類似功能的方法叫findviewbyid(),二者有時均可使用,但也有區別

區別在於:

如果你的activity裡用到別的layout,比如對話方塊layout,你還要設定這個layout上的其他元件的內容,你就必須用inflate()方法先將對話方塊的layout找出來,然後再用findviewbyid()找到它上面的其它元件。例如:

[html]view plain

copy

view 

view1

=view

.inflate(this,r.layout.dialog_layout,null);  

textviewdialogtv

=(textview)view1.findviewbyid(r.id.dialog_tv);  

dialogtv.settext("abcd");  

注:r.id.dialog_tv是在對話方塊layout上的元件,而這時若直接用

this.findviewbyid(r.id.dialog_tv)肯定會報錯。

[html]view plain

copy

view 

viewstub

= ((viewstub) findviewbyid(r.id.stubview)).inflate();  

inflate()或可理解為「隱性膨脹」,隱性擺放在view裡,inflate()前只是獲得控制項,但沒有大小沒有在view裡佔據空間,inflate()後有一定大小,只是出於隱藏狀態

1.findviewbyid()是view物件的方法,先通過inflate()方法得到view,呼叫這個view物件的getviewbyid()方法,就能得到這個view樹上的子view。

2.inflate()函式可以通過getsystemservice()方法得到,引數是layout_inflater_service。

3.inflate()函式的第乙個引數是布局檔案的r引用,第二個引數是根

viewgroup,也就是從哪個viewgroup節點開始渲染。對於第二個引數,需要例項化這個viewgroup,可以這麼做,在xml布局檔案中設定這個root的id,然後用findviewbyid()方法通過id就能得到它,比如

view layout = inflater.inflate(r.layout.toast_layout,(viewgroup) findviewbyid(r.id.toast_layout_root));

關於inflate 方法

1.inflate方法的主要作用就是將xml轉換成乙個view物件,用於動態的建立布局。2.它有四種過載形式,但最終都只會呼叫下面的第四種。1.public view inflate int resource,viewgroup root 2.public view inflate int reso...

inflate中的引數

public view inflate int resource,viewgroup root,boolean attachtoroot resource 需要載入的layout的xml資源 root 表示獲得容器檢視物件後,要將獲得的該物件新增到哪個容器檢視物件中,如果不想將要獲得的物件新增到任何...

inflate方法與findViewById的區別

layoutinflater作用是將layout的xml布局檔案例項化為view類物件。對於乙個沒有被載入或者想要動態載入的介面,都需要使用layoutinflater.inflate 來找 res layout下的 xml 布局檔案,並且例項化為view類物件 獲取layoutinflater的方...