【Interface&navigation】延迟加载视图(10)

有时您的布局可能需要很少使用的复杂视图。无论它们是项目详细信息,进度指示符还是撤销消息,都可以通过仅在需要时加载视图来减少内存使用量并加快渲染速度。

当您的应用程序将来可能需要复杂视图时,推迟加载资源是一项重要的技术。您可以通过ViewStub为那些复杂且很少使用的视图定义一个实现此技术 。

定义一个ViewStub


ViewStub是一个没有尺寸的轻量视图,不会绘制任何东西或参与布局。因此,膨胀并便宜地离开视图层次结构是便宜的。每个ViewStub只需要包含该android:layout属性来指定要膨胀的布局。

以下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()。

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

注意:该inflate()方法返回View一次完成的充气。所以findViewById()如果您需要与布局进行交互,则无需致电。

一旦可见/充气,ViewStub元素不再是视图层次结构的一部分。它被膨胀的布局取代,并且该布局的根视图的ID是由android:inflatedIdViewStub 的属性指定的。(android:id为此指定的ID ViewStub仅在ViewStub布局可见/充气之前有效。)

注意:其中一个缺点ViewStub是它目前不支持<merge>布局中的标签被夸大。

有关此主题的其他信息,请参阅 优化与存根(博客文章)。

联系我

QQ:94297366
微信打赏:https://pan.baidu.com/s/1dSBXk3eFZu3mAMkw3xu9KQ

公众号推荐:

【Interface&navigation】延迟加载视图(10)

猜你喜欢

转载自blog.51cto.com/4789781/2133528