Android 佈局XML性能優化

三種優化方式可以參照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");
        }

    }
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章