android - 对于单个布局 XML 文件,多少个 ViewStub 太多了?

标签 android viewstub

我在 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/

相关文章:

Android 数据绑定(bind) - 如何使用 ViewStub 进行数据绑定(bind)

java - ViewStub 没有膨胀并且布局保持空白 - Android

android - 在 Android 中的不同 Activity 中的按钮上设置时间

Android 布局 - ListView 占用太多空间

java - 缩放时 Android map V2 瓦片消失

android - Gradle Android库无法找到主项目的资源

java - 随机游走者(圆圈)比其他轴更频繁地向上移动

android - CoordinatorLayout中如何让ViewStub在AppBarLayout下面