我在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,并在我的所有活动布局上使用相同的骨架视图
答案 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;
}