
ViewStub 是一個(gè)寬高都為0,不可見的(GONE),不參與measure與layout(絕大部分情況),不繪制任何東西,可以用來做懶加載的View,常用于布局優(yōu)化。
<ViewStub android:id="@+id/stub"
android:inflatedId="@+id/subTree"
android:layout="@layout/mySubTree"
android:layout_width="120dip"
android:layout_height="40dip" />
ViewStub stub = findViewById(R.id.stub);
View inflated = stub.inflate();
優(yōu)點(diǎn)
內(nèi)存耗費(fèi)很小
占位特性
不可見
-
一次調(diào)用
ViewStub只能加載一次,重復(fù)加載會(huì)導(dǎo)致異常,這是因?yàn)閂iewStub只要加載過一次,其自身就會(huì)被移除(并非銷毀),把并自身所包含的內(nèi)容全部傳給父布局。
下面的才是關(guān)鍵:
當(dāng)ViewStub里面的TextView進(jìn)行文字改變的時(shí)候,寬度發(fā)生變化,可以使用以下方法進(jìn)行處理:
private void setLatestWidth() {
ViewGroup.LayoutParams params = mMsgUnreadLocationView.getLayoutParams();
params.width = ViewGroup.LayoutParams.WRAP_CONTENT;
mMsgUnreadLocationView.setLayoutParams(params);
}