三种优化方式可以参照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"); } } }