美文网首页
Android优化五:布局优化

Android优化五:布局优化

作者: ldlywt | 来源:发表于2017-05-08 21:41 被阅读211次

    Android优化一:提纲
    Android优化二:性能检测
    Android优化三:内存优化
    Android优化四:App启动速度优化
    Android优化五:布局优化
    Android优化六:性能优化

    1、减少布局层级

    Google在API文档中建议View树的高度不宜超过10层。

    以前我们用Eclipse写代码时,自动生成的模板是以LinearLayout为根节点的,但是后面变成了RelativeLayout为根节点。

    RelativeLayout可以让视图树的层级少,但是LinearLayout的测量效率要高。

    如果使用RelativeLayout,需要尽量避免嵌套;如果使用LinearLayout,保证层级不能太深。

    2、<include>标签

    <include> 标签并不能减少布局层级,只能增加代码可读性和布局的复用性。

    3、<merge>标签

    Q:使用merge标签有哪些优点?

    <merge />标签可以用于减少View树的层次来优化Android的布局,使用<include>包含布局的时候,系统会自动忽略merge层级。

    Q:merge标签有什么缺点么?

    1.<merge/>只能作为XML布局的根标签使用。
    2.当Inflate以<merge />开头的布局文件时,必须指定一个父ViewGroup,并且必须设定attachToRoot为true。
    View android.view.LayoutInflater.inflate(int resource, ViewGroup root, boolean attachToRoot)

    Q:什么情况考虑使用Merge标签?

    1.子视图不需要指定任何针对父视图的布局属性,例子中TextView仅仅需要直接添加到父视图上用于显示就行。
    2.假如需要在LinearLayout里面嵌入一个布局(或者视图),而恰恰这个布局(或者视图)的根节点也是LinearLayout,这样就多了一层没有用的嵌套,无疑这样只会拖慢程序速度。而这个时候如果我们使用merge根标签就可以避免那样的问题。

    merge标签的使用:

    <merge xmlns:android="http://schemas.android.com/apk/res/android"
      xmlns:tools="http://schemas.android.com/tools"
      android:layout_width="match_parent"
      android:layout_height="match_parent" >
      <TextView
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:text="merge标签" />
    </merge>
    

    4、<ViewStub>标签

    Q:使用ViewStub标签有哪些优点?

    <ViewStub>标签可以实现对一个view进行延迟加载,布局在初始化加载不需要显示出来,只有在特点情况才显示出来。

    Q:使用ViewStub有啥需要注意的吗?

    1.在要渲染的布局中并不支持<merge/>标签。
    2.ViewStub.infalte方法不能调用两次,否者会出现异常。(因为一旦ViewStub visible/inflated,则ViewStub将从视图框架中移除,其id也会失效)

    Q:ViewStub标签和View.GONE的区别?

    ViewStub标签只有在显示时才去渲染整个布局,但是View.GONE在初始化布局时就已经添加在布局树上了。

    使用方法:

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

    相关文章

      网友评论

          本文标题:Android优化五:布局优化

          本文链接:https://www.haomeiwen.com/subject/jepvtxtx.html