最近学习了一些android布局优化方面的知识,android对布局优化提供了三种布局:

<include/><merge/><ViewStub/>

1、重用布局<include/>

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"      android:orientation="vertical"       android:layout_width=”match_parent”      android:layout_height=”match_parent”      android:background="@color/app_bg"      android:gravity="center_horizontal">      <include layout="@layout/titlebar"/>      <TextView android:layout_width=”match_parent”                android:layout_height="wrap_content"                android:text="@string/hello"                android:padding="10dp" />      ...  </LinearLayout>  

1)标签可以使用单独的layout属性,这个也是必须使用的。
2)可以使用其他属性。标签若指定了ID属性,而你的layout也定义了ID,则你的layout的ID会被覆盖。
3)在include标签中所有的android:layout_*都是有效的,前提是必须要写layout_width和layout_height两个属性。

2、减少视图层级<merge/>
这个标签在UI的结构优化中起着非常重要的作用,它可以删减多余的层级,优化UI。<merge/>多用于替换FrameLayout或者当一个布局包含另一个时,标签消除视图层次结构中多余的视图组。例如你的主布局文件是垂直布局,引入了一个垂直布局的include,这是如果include布局使用的LinearLayout就没意义了,使用的话反而减慢你的UI表现。这时可以使用标签优化。

<merge xmlns:android="http://schemas.android.com/apk/res/android">      <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/add"/>      <Button android:layout_width="fill_parent" android:layout_height="wrap_content" android:text="@string/delete"/>  </merge>  

现在,当你添加该布局文件时(使用标签),系统忽略节点并且直接添加两个Button。

3、需要时使用<ViewStub/>
这个标签最大的优点是当你需要时才会加载,使用他并不会影响UI初始化时的性能。各种不常用的布局想进度条、显示错误消息等可以使用这个标签,以减少内存使用量,加快渲染速度。

<ViewStub android:id="@+id/stub_import" android:inflatedId="@+id/panel_import" android:layout="@layout/progress_overlay" android:layout_width="fill_parent" android:layout_height="wrap_content" android:layout_gravity="bottom" />  

当你想加载布局时,可以使用下面其中一种方法:

((ViewStub) findViewById(R.id.stub_import)).setVisibility(View.VISIBLE); // or  View importPanel = ((ViewStub) findViewById(R.id.stub_import)).inflate(); 

当调用inflate()函数的时候,ViewStub被引用的资源替代,并且返回引用的view。 这样程序可以直接得到引用的view而不用再次调用函数findViewById()来查找了。
注:ViewStub目前有个缺陷就是还不支持 标签。

更多相关文章

  1. android使用Intent实现页面跳转--startActivity()与startActivityF
  2. drawable属性
  3. 使用GridView的auto_fit遇到的坑
  4. andr
  5. Android菜单详解(四)——使用上下文菜单ContextMenu
  6. mybatisplus的坑 insert标签insert into select无参数问题的解决
  7. 箭头函数的基础使用
  8. NPM 和webpack 的基础使用
  9. Python list sort方法的具体使用

随机推荐

  1. android 检查能否上网
  2. Android APK权限提升到System
  3. 基于Paho Android Service 实现MQTT协议
  4. ActivityGroup返回键获取焦点处理
  5. Android(安卓)BroadcastReceiver常见监听
  6. Android Studio第一次启动的Fetching and
  7. android简单实现轮播图效果
  8. Android多功能课程表项目实现(完整版)
  9. android通讯录列表,A~Z字母提示view
  10. Cocos2d-x + Android(安卓)+ Eclipse + W