6

我在base_layout.xml一个XML文件(ViewStubImageViewLinearLayoutImageButton

ViewStub我应该关心我在这个布局文件中放置了多少视图吗?

我在 developer.android 网站上阅读:

ViewStub 是一个笨重的轻量级视图。它没有维度,不绘制任何东西,也不以任何方式参与布局。这意味着 ViewStub 的膨胀非常便宜,并且在视图层次结构中保持非常便宜

拥有 20 多个是否足够便宜?当然不是全部膨胀,一次只有1-2个。

当我说cheap enough或谈论存在时concerned,我指的是用户界面的性能

编辑: 我要完成的工作:创建一个布局 XML 文件,它可以作为我所有活动的框架。在每一个中,我都会用活动的布局Activity正确地膨胀。ViewStub由于我有很多活动需要相同的骨架,我希望尽可能多地重复使用

我有一个Activity班级,它几乎是我所有活动的父级。这个父类调用setContentView(R.layout.base_layout);. 对于每个孩子的活动,我所做的就是给相应的ViewStub内部充气base_layout.xml。这样做可以让我拥有一个非常定制的 UI,在我的所有活动布局上使用相同的骨架视图

4

2 回答 2

15

我不认为你会看到很大的性能冲击。它仍然比从一开始就全部充气要便宜。

拥有这么多存根的缺点是您可能会忽略整个设计。也许将多个视图/项目组合到一个视图组中更有意义。也许你可以解释你正在尝试做什么,看看是否有更好的方法来实现它

编辑: 好吧,而不是拥有多个包含不同子视图的 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 并在您的活动中 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,您可以在膨胀之前在代码中设置它。

于 2010-10-08T19:46:11.200 回答
0

LinearLayoutRelativeLayoutViewGroup的扩展

所以我使用ViewGroup作为参数这是我的解决方案

public CategoryViewController(Context context, ViewGroup containerView) {
        this.context = context;
        LayoutInflater inflater = LayoutInflater.from(context);
        View categoryLayout = inflater.inflate(R.layout.category_section, null, false);
        containerView.addView(categoryLayout);
        this.categoryView = categoryLayout;
}
于 2016-05-14T13:21:52.423 回答