標籤:android viewstub 布局最佳化
使用ViewStub可以消極式載入一個布局檔案,提高顯示速率。剛開始接觸到,記錄下來。
關於viewstub的使用,我們可以在不同的布局中使用,比如可以根據裝置的大小動態決定顯示哪個介面。
viewstub和include比較像,都是在一個布局檔案中嵌入另外一個布局檔案,然而viewstub是可以說是消極式載入,它只會在你手動指定載入的時候才會載入這個布局檔案,而include則會立即載入。
在布局中使用ViewStub標籤來引入檔案
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" tools:context="com.example.viewstub.MainActivity" > <TextView android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="@string/hello_world" /> <Button android:id="@+id/toggle" android:layout_width="wrap_content" android:layout_height="wrap_content" android:onClick="onClick" android:text="顯示/隱藏" /> <ViewStub android:id="@+id/vs" android:layout_width="match_parent" android:layout_height="match_parent" android:inflatedId="@+id/inflated_id" android:layout="@layout/view_stub_layout" /></LinearLayout>
view_stub_layout.xml
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical" ><TextView android:id="@+id/tv" android:layout_width="match_parent" android:layout_height="wrap_content" android:text="vs中的tv" /> </LinearLayout>
這是布局檔案,那麼怎麼在程式運行時載入這個布局呢?
public class MainActivity extends ActionBarActivity { private ViewStub stub; private boolean isShow = true; private TextView tv; /* (non-Javadoc) * @see android.support.v7.app.ActionBarActivity#onCreate(android.os.Bundle) */ @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //布局的載入有兩種方式,一種是stub.inflate(); //另一種是stub.setVisibility(View.VISIBLE); stub = (ViewStub) this.findViewById(R.id.vs);// stub.inflate(); stub.setVisibility(View.VISIBLE); //執行個體化之後就可以拿到stub布局的根節點,然後可以對之進行操作 View root = this.findViewById(R.id.inflated_id); //注意要先執行個體化stub,然後才可以拿到tv tv = (TextView) root.findViewById(R.id.tv); root.setBackgroundColor(Color.BLUE); } public void onClick(View v){ switch (v.getId()) { case R.id.toggle: if (isShow) { stub.setVisibility(View.GONE); }else{ stub.setVisibility(View.VISIBLE); tv.setText("---"); } isShow = !isShow; break; default: break; } }}
著作權聲明:本文為博主原創文章,未經博主允許不得轉載。若有錯誤地方,還望批評指正,不勝感激。
android開發布局最佳化之ViewStub