Android中文API-ViewStub

來源:互聯網
上載者:User

標籤:

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

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.