📅  最后修改于: 2023-12-03 14:59:15.842000             🧑  作者: Mango
Android ViewStub是一个轻量级、惰性加载的View,它可以在运行时动态地将布局文件中的一个代表性标签替换为另一个布局。
ViewStub方便我们在程序中避免在启动时就进行复杂的布局显示,而是等到需要加载布局的时候再进行加载,从而优化性能。
ViewStub有两种用法:一种是以静态方式在xml布局文件中定义;另一种是以编程方式动态地创建和设置。
可将ViewStub视为一个不可见的View对象,它可以在需要时查询并装载其定义的布局文件。定义ViewStub的xml语法如下:
<ViewStub
android:id="@+id/stub_view"
android:layout="@layout/layout_stub"
android:inflatedId="@+id/inflated_view"
android:visibility="gone" />
其中,id属性是必需的;layout属性是要装载的布局文件;inflatedId是装载布局的 id属性。visibility属性表示视图的可见性,通常设置为gone。
在需要打开ViewStub时,可调用ViewStub的inflate方法,inflate方法可以返回装载的布局对象。例如:
ViewStub stub = findViewById(R.id.stub_view);
View inflatedView = stub.inflate();
inflate()会自动装载指定的布局文件,所以我们不需要自己手动添加。
ViewStub也可以通过编程方式创建,其语法如下:
ViewStub stub = new ViewStub(context);
stub.setLayoutParams(new ViewGroup.LayoutParams(
ViewGroup.LayoutParams.WRAP_CONTENT,
ViewGroup.LayoutParams.WRAP_CONTENT));
stub.setInflatedId(R.id.inflated_view);
stub.setLayoutResource(R.layout.layout_stub);
其中,setLayoutResource()方法可设置要装载的布局文件,setInflatedId()方法可设置装载布局的id属性。然后,将ViewStub对象添加到另一个视图对象中:
LinearLayout.LayoutParams layoutParams =
new LinearLayout.LayoutParams(
LinearLayout.LayoutParams.MATCH_PARENT,
LinearLayout.LayoutParams.WRAP_CONTENT);
layout.addView(stub, layoutParams);
ViewStub是非常有用和灵活的布局工具,可以帮助减少启动时间和内存开销。但是在使用ViewStub的同时,也需要注意它的一些限制和使用约束。