您好,欢迎来到伴沃教育。
搜索
您的当前位置:首页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 
  
  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();

Copyright © 2019- bangwoyixia.com 版权所有 湘ICP备2023022004号-2

违法及侵权请联系:TEL:199 1889 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务