2010-10-08 57 views
5

我在XML文件(base_layout.xml)中定义了一个布局,除了包含3-5个其他视图(如ImageViewLinearLayout包含3-5个ImageButton视图)之外,它还可能包含20+ ViewStub定义。对于单个布局XML文件,有多少ViewStubs太多?

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

我读了developer.android网站:

一个ViewStub是一个愚蠢的轻便 视图。它没有维度,它不会 绘制任何东西,并且不会以任何方式参与 在布局中。这意味着 一个ViewStub是很便宜的 膨胀,很便宜的,以保持在 视图层次

是它足够便宜,让他们的20+?当然不是所有的都是膨胀的,每次只有1-2个。

当我说cheap enough或者是concerned谈话,我对于UI的性能

编辑: 什么,我试图完成: 创造出可以为所有的骨架的布局XML文件我的活动。在每个Activity中,我将用活动的布局夸大正确的ViewStub。因为我有这么多活动需要相同的骨架,我希望尽可能重复使用

我有一个Activity类,这是几乎所有我的活动的父母。这个父类调用setContentView(R.layout.base_layout);。对于每个儿童活动,我所做的只是在base_layout.xml内对应的ViewStub充气。这样做可以让我拥有一个非常自定义的用户界面,并在我的所有活动布局中使用相同的骨架视图。

回答

13

我不认为你会看到大的表现。它比起全部从开始时膨胀起来还要便宜。

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

编辑: 好,而不是有多个ViewStubs,其中包括不同的子视图就像

<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并在acitivities的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(); 

这样,你还是只有一个ViewStub在base_layout,这你可以设置在充气前的代码。

+0

更新我的问题,后读**编辑: ** – binnyb 2010-10-08 20:04:59

+0

啊哈!我之前试图做这样的事情,除非我无法得到它的工作。现在我已经使用了你的示例代码,它就像一个魅力。优秀。 – binnyb 2010-10-08 20:58:18

+0

@Tseng我需要做类似的事情,谢谢你的信息,但是如何定义id activity1而不将它包含在布局文件中呢? – 2013-04-14 19:53:10

0

的LinearLayoutRelativeLayout的是延长的ViewGroup

所以我用的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; 
}