三種優化方式可以參照http://www.trinea.cn/android/layout-performance/
佈局優化一般是減少嵌套層級,
除了嵌套之外 還可以用
1.include載入類似的xml重複佈局layout
2.merge載入子類佈局文件
3.viewStub 優化初始加載的內存(加載xml時 viewStub只是作爲一個標籤,並不會將裏面的xml載入內存,一般在activity中根據情況載入viewStub)
merge使用情況--相對於include由於沒有根佈局,少了一個層級,所以適用於優化層級佈局的情況
比如說: public class MyMergeView extends Linerlayout{ ************************* onCreat(){ inflate(R.layout)}};
上面的View需要inflate一個佈局 如果使用含有根佈局的文件則總佈局文件格式爲 Linerlayout-viewGroup-view
但是如果使用merge則爲 Linerlayout-view 少了一個層級佈局
viewStub初始載入時優化內存 缺點:只能使用一次 使用情況- 兩個頁面佈局類似 但是有部分佈局不一樣的時候 可以用viewStub
<?xml version="1.0" encoding="utf-8"?> <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:orientation="vertical" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:layout_width="match_parent" android:layout_height="match_parent" android:orientation="vertical"> <!--include測試--> <include layout="@layout/commen_title"></include> <!--merge測試--> <include layout="@layout/commen_mergen"></include> <ViewStub android:id="@+id/stubone" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout="@layout/viewstub_one" /> <ViewStub android:id="@+id/stubtwo" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout="@layout/viewstub_two"/> </LinearLayout> </ScrollView>Activity文件
package com.mopon.mycode.optimization.xml; import android.app.Activity; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v7.app.AppCompatActivity; import android.view.View; import android.view.ViewStub; import android.view.Window; import android.widget.Button; import android.widget.TextView; import com.mopon.mycode.R; import com.mopon.mycode.utils.ToastUtils; /** * 項目名稱:LayoutOptimizationActivity * 類描述:佈局優化 mergen include viewStub * 創建人: * 創建時間:2017/9/18 10:06 * 備註: */ public class LayoutOptimizationActivity extends AppCompatActivity{ private int mState = 0; @Override protected void onCreate(@Nullable Bundle savedInstanceState) { super.onCreate(savedInstanceState); requestWindowFeature(Window.FEATURE_NO_TITLE); if(getSupportActionBar()!=null){ getSupportActionBar().hide(); } setContentView(R.layout.activity_layoutoptimization); TextView tv_title = (TextView) findViewById(R.id.tv_title); tv_title.setText("測試include"); Button btn = (Button) findViewById(R.id.btn); btn.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View view) { ToastUtils.show("測試"); } }); if(mState == 0) { ViewStub viewStub01 = (ViewStub) findViewById(R.id.stubone); viewStub01.inflate(); TextView tv_stub01 = (TextView) findViewById(R.id.tv_stub_01); tv_stub01.setText("這是第一個sutb"); }else{ ViewStub viewStub02 = (ViewStub) findViewById(R.id.stubtwo); viewStub02.inflate(); TextView tv_stub02 = (TextView) findViewById(R.id.tv_stub_02); tv_stub02.setText("這是第二個sutb"); } } }