Android最佳实践性能(三)提高性能布局(按需加载视图)

按需加载视图

上一课 下一课

这节课教你

  1. 定义一个ViewStub
  2. 加载ViewStub布局

你也应该阅读

  • 与存根优化(博客文章)

有时,你的布局可能需要很少使用复杂的看法。无论他们是项目的详情,进度指标,或撤消的消息,可以减少内存使用和需要时,才加载意见加快渲染。

定义一个ViewStub

ViewStub是无量纲的轻量级视图,不画任何东西,或参与布局。因此,它的价格便宜膨胀和廉价的视图层次离开。每个ViewStub只需要包含android:layout属性来指定 layout to inflate

下面ViewStub为半透明的进度条叠加。它应该是只有当新的项目被导入到应用程序中显示。

<ViewStub 
    android:id = "@+id/stub_import" 
    android:inflatedId = "@+id/panel_import" 
    android:layout = "@layout/progress_overlay" 
    android:layout_width = "fill_parent" 
    android:layout_height = "wrap_content" 
    android:layout_gravity = "bottom"  />

加载ViewStub布局

当你想通过加载指定的布局ViewStub,将它设置可见通过调用setVisibility(View.VISIBLE)inflate()

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

注:inflate() 方法返回的inflated View一次完成。所以你不需要调用findViewById() ,如果你需要的布局进行交互。

一旦visible/inflated时,ViewStub元素是视图层次不再一部分。它被替换的 inflated layout和ID为布局的根视图是由指定的android:inflatedId 的ViewStub的属性。(该ID android:id 指定ViewStub才有效,直到ViewStub布局visible/inflated。)

注意:有一个缺点ViewStub是它当前不支持的<merge/>到待充气的布局标记。



你可能感兴趣的:(Android最佳实践性能(三)提高性能布局(按需加载视图))