《android开发必知的50个诀窍》笔记Hack-2

使用延迟加载以及避免代码重复

创建复杂布局时,过多的控件将导致View树的层次越来越深,应用程序会越来越慢。优化布局是创建运行速度快,响应灵敏的应用程序的基础。

1:使用<include/>标签避免代码重复

假设需要一个显示应用程序名的TextView,通常多个Activity对应的XML里面都会需要,加入我们挨个复制到每个布局文件中,以后想要修改这个TextView的话,将会是一件很麻烦的事情。解决这个问题最好的方法就是使用<include/>标签。

Activity的布局文件为

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
>
<include layout="@layout/footer"/>

footer的布局文件为:

<TextView xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:gravity="center_horizontal"
android:text="hello" >

但是对于同一个layout在不同布局中可能需要修改部分属性,那我们就想直接覆盖就行了,我们会发现此时<include/>标签失效了,查看问题发现,必须要修改所指定的所有的android:layout_* 属性才可以生效。我们将footer中的部分属性修改如下:

android:layout_height="0dp"
android:layout_width="0dp"

这样在<include/>标签中指定 layout_widthlayout_height 属性。如果使用者不指定这两个属性,他们的属性值都是0,我们便看不到此页脚。

2:使用ViewStub实现View的延迟加载

设计布局的时候,我们往往需要根据实际情况显示视图。如果想要一个视图在需要的时候显示,可以直接用View.setVisibility() 来设置,考虑到性能因素的话Android为我们提供了ViewStub这个类。

“ViewStub是一种不可视并且大小为0的视图,可以延迟到运行时填充(inflate)布局资源,当ViewStub设置为可视或者inflate()方法被调用后,就会填充布局资源,然后ViewStub便会被填充的视图替代。”

<ViewStub 
    android:id="@+id/stub"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent"
    android:layout="@layout/footer"
    android:inflatedId="@+id/view_stub"
    />

在需要显示的时候使用findViewById(R.id.stub).setVisibility(View.VISIBLE); 即可改变ViewStub的可视性。

3:总结

<include/> 标签是整理布局的有效工具。
ViewStub是实现延迟加载视图的优秀类。无论在什么情况下,只要开发者需要根据上下文选择隐藏或者显示一个视图,都可以用ViewStub实现。或许并不会因为一个视图的延迟加载而感激到性能的明显提升,但是如果视图树的层次很深,便会感激到性能上的差距了。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值