我在 XML 文件 (base_layout.xml
) 中定义了一个布局,其中可能包含 20 多个 ViewStub
定义以及 3-5 个其他 View ,例如 ImageView
和一个包含 3-5 个 ImageButton
View 的 LinearLayout
。
我应该关心我在这个布局文件中放置了多少个 ViewStub
View 吗?
我在 developer.android 网站上看到:
A ViewStub is a dumb and lightweight view. It has no dimension, it does not draw anything and does not participate in the layout in any way. This means that a ViewStub is very cheap to inflate and very cheap to keep in a view hierarchy
拥有 20 多个是否足够便宜?当然不是所有的都膨胀,一次只有 1-2 个。
当我说足够便宜
或谈论关注
时,我指的是 UI 的性能
编辑:
我想要完成的事情:
创建一个布局 XML 文件,它可以作为我所有 Activity 的骨架。在每个 Activity
中,我将使用 Activity 的布局填充正确的 ViewStub
。由于我有很多 Activity 需要相同的骨架,所以我希望尽可能多地重复使用
我有一个 Activity
类,它是我几乎所有 Activity 的父类。这个父类调用 setContentView(R.layout.base_layout);
。对于每个子 Activity ,我所做的只是在 base_layout.xml
中膨胀相应的 ViewStub
。这样做可以让我拥有一个非常自定义的 UI,在我的所有 Activity 布局中使用相同的骨架 View
最佳答案
我认为您不会看到很大的性能影响。它仍然比从一开始就给它们充气便宜。
有这么多 stub 的缺点是您可能会看不到整个设计。将多个 View /项目分组到一个 View 组中可能更有意义。或许你可以解释一下你正在尝试做什么,看看是否有更好的方法来实现它
编辑: 好吧,而不是拥有多个包含不同 subview 的 ViewStub,例如
<ViewStub android:id="@+id/stub"
android:inflatedId="@+id/activity1"
android:layout="@layout/myActivity1"
/>
<ViewStub android:id="@+id/stub2"
android:inflatedId="@+id/activity2"
android:layout="@layout/myActivity2"
/>
只需要一个 ViewStub,然后在你的 Activity onCreate() 中做类似的事情
setContentView(R.layout.base_layout);
ViewStub stub = (ViewStub)findViewById(R.id.stub);
stub.setInflateId(R.id.activity1);
stub.setLayoutResource(R.layout.myActivity2);
stub.inflate();
这样一来,您的 base_layout 中仍然只有一个 ViewStub,您可以在膨胀之前在代码中对其进行设置。
关于android - 对于单个布局 XML 文件,多少个 ViewStub 太多了?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3893669/