標籤:ext int 關注 style inflate find tin 作者 mic
ViewStub控制項是一個不可見,0尺寸得惰性控制項。當ViewStub控制項設定可見,或者調用inflate(),並運行完畢之後,ViewStub所指定的layout資源就會被載入。這個ViewStub就會被新載入的layout檔案取代。
ViewStub也會從其父控制項中移除。
因此ViewStub存在view Hierarchy中的生存期為直到ViewStub運行了setVisable(int)或者inflate()方法。
在setVisable或者inflate方法運行完成。被載入的Layout檔案伴隨著ViewStub的屬性設定一起被增加ViewStub的父控制項中。
你能夠定義或者重寫被載入layout檔案的id屬性。
比如:
<ViewStub android:id="@+id/stub" android:inflatedId="@+id/subTree" android:layout="@layout/mySubTree" android:layout_width="120dip" android:layout_height="40dip" />
這個定義的ViewStub控制項能夠通過設定的id“stub”找到。在成功擷取subTree制定的kayout之後,ViewStub就從其父控制項中移除了,被載入的mySubTree,能夠通過id“subTree”找到。從以上的代碼屬性設置來說,終於載入的Layout檔案,會以寬120dp,高40dp展示。
通過下面方式,能夠使ViewStub展示出其所代表的layout檔案。
ViewStub stub = (ViewStub) findViewById(R.id.stub); View inflated = stub.inflate();
當inflate()運行完畢,Viewstub就被替換掉了,inflate返回的View就是mySubTree這個布局檔案的View。所以就不須要運行額外的findById了。
值得注意的是:ViewStub在Api1的時候就已經提供了,可是在api16的時候,添加了一個方法:
public void setLayoutInflater (LayoutInflater inflater)
這種方法攻克了,不能指定LayoutInflater 的問題,這涉及了Context的使用。
假設你在低於Api16的開發中,遇到找到不你載入View 的 id的情況,那多數情況是。Context出了問題。在低於api16的情況下,解決方案有兩種:
(1)自己定義ViewStub
(2)在V7包中。使用ViewStubCompat類。
作者有話說:假設你須要或者Android中文API。請掃一掃以下的二維碼,您的關注。就是我的動力。
Android中文API-ViewStub