有时您的布局可能需要很少使用的复杂视图。无论它们是项目详细信息,进度指示符还是撤销消息,都可以通过仅在需要时加载视图来减少内存使用量并加快渲染速度。
当您的应用程序将来可能需要复杂视图时,推迟加载资源是一项重要的技术。您可以通过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
公众号推荐: