Android优化五:布局优化

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

1、减少布局层级

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

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

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

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

2、标签

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

3、标签

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

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

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

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

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

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

merge标签的使用:


  

4、标签

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

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

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

1.在要渲染的布局中并不支持标签。
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优化五:布局优化)