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");
        }

    }
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值