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();


作者:假装是程序猿丶
链接:https://www.jianshu.com/p/a44be4524626
來源:简书
著作权归作者所有。商业转载请联系作者获得授权,非商业转载请注明出处。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值