Android修炼之道—布局优化( 100 喵喵币)

首先说说setContentView()中发生了什么。

1.Android读取应用的资源数据(APK文件内,存储在内部存储器或SD卡中);

2.解析资源数据,展开布局;

3.布局展开成为Activity的顶层视图;

      随着部件数量的增长,展开布局所花费的时间几乎呈线性增长。布局通常在Activity的onCreate()方法中展开,
它花费的时间直接影响Activity。


1.用RelativeLayout替代LinearLayout
 创建相同的视图,相对布局往往创建更少的对象,显而易见,显示十个以上控件的最好使用相对布局。


2.合并布局
用<merge />标签合并布局来减少布局层次,往往布局的顶层元素是一个FrameLayout。


3.重用布局
<include />标签可用于两个目的:
1.多次使用相同的布局;
2.布局有一个通用的组成部分,或者有部分依赖于设备配置(如横屏,竖屏)
如下代码显示如何只包含一次布局:
//这里假设有两个版本的mylayout.xml,一个在res/layout-land目录,一个在res/layout-port;
<LinearLayout xmls:android="http://schemas.android.com/apk/res/android"
    android:layout_width = "fill_parent"
    android:layout_height = "fill_parent"
    android:orientation = "vertical" >
    <include android:id="@+id/myid"  android:layout="@layout/mylayout"
    android:layout_margin="8dip"/>
</LinearLayout>

覆盖布局的参数是可选的,只有 android:layout属性在<include />标签中是必须的;
可覆盖属性:1.根视图的id(android:id); 2.布局参数(android:layout_*);


4.ViewStub
ViewStub是轻量级且不可见的视图,Android用它推迟初始化不仅可以推迟实例化,提高性能,还可能会节省内存。
<LinearLayout xmls:android="http://schemas.android.com/apk/res/android"
    android:layout_width="fill_parent"
    android:layout_height = "fill_parent"
    android:orientation = "vertical" >
    <ViewStub
        android:id="@id/mystubid"
        android:inflated="@+id/myid"
        android:layout="@layout/mylayout" />
</LinearLayout>
要展开mylayout.xml中的布局,有两种方法:
1.在代码中展开布局
    ViewStub stub = (ViewStub) findViewById(R.id.mystubid);
    View inflatedView = stub.inflate();
2.在代码中用setVisibility()在代码中展开
    View view = findViewById(R.id.mystubid);
    view.setVisibility(View.VISIBLE);
    view = findViewById(R.id.myid);

5.布局工具
Android SDK提供两个工具: hierarchyviewer 和 layoutopt。



你可能感兴趣的:(Android修炼之道—布局优化( 100 喵喵币))