对于单个布局XML文件,有多少ViewStubs太多了?

时间:2010-10-08 19:24:33

标签: android viewstub

我在XML文件(base_layout.xml)中定义了一个布局,除了3-5个其他视图(例如ViewStub和{{1}之外,还可能包含20多个ImageView个定义包含3-5个LinearLayout视图。

我应该关注我在此布局文件中放置了多少ImageButton个视图?

我在developer.android网站上阅读:

  

ViewStub是一个愚蠢而轻量级的   视图。它没有维度,也没有   画任何东西,不参加   在任何方式的布局。这意味着   一个ViewStub非常便宜   膨胀,非常便宜,保持在一个   查看层次结构

足够便宜,有20多个吗?当然,并非所有人都被夸大,一次只有1-2个。

当我说ViewStub或谈论成为cheap enough时,我就是关于用户界面的表现

修改 我想要完成的事情: 创建一个布局XML文件,它可以作为我所有活动的骨架。在每个concerned中,我会使用活动的布局夸大正确的Activity。由于我有很多活动需要相同的骨架,我希望尽可能多地重复使用

我有一个ViewStub类,它几乎是我所有活动的父级。这个父类调用Activity。对于每个孩子的活动,我所做的就是在setContentView(R.layout.base_layout);里面膨胀相应的ViewStub。这样做可以让我拥有一个非常自定义的UI,并在我的所有活动布局上使用相同的骨架视图

2 个答案:

答案 0 :(得分: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,你可以在充气之前在代码中设置它。

答案 1 :(得分:0)

LinearLayout RelativeLayout 扩展为 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;
}