通常情况下,我会创建一个自定义视图,例如:
public class MyView extends LinearLayout{
public MyView(Context context){
super(context);
//Inflating my custom layout
LayoutInflater inflater = getLayoutInflater();
inflater.inflate(R.layout.view_layout, this);
}
}
上述布局的问题是,它会创建一个新的
LinearLayout
并在其中填充 R.layout.view_layout
,从而添加一个不必要的视图层级。
R.layout.view_layout
包含多个子元素的 RelativeLayout
,如果通过继承 RelativeLayout
进行编程添加很困难。
不必要的层次结构会拖慢应用程序的运行速度。
最佳的创建 自定义视图/视图组
的方法是什么,不需要额外的层次结构?
根据 CommonsWare 的解决方案已解决:
XML 布局:
<merge>
<TextView ...
.../>
More items
</merge>
由于XML布局的父视图是RelativeLayout
,因此我将在代码中扩展RelativeLayout
,而不是LinearLayout
public class MyView extends RelativeLayout{
public MyView(Context context){
super(context);
//Inflating my custom layout
LayoutInflater inflater = getLayoutInflater();
inflater.inflate(R.layout.view_layout, this);
}
}
merge
标签,但我并不完全理解这一点,他仍然需要在xml中使用一个RelativeLayout
来保持子视图的位置,是吗?因此,如果他从RelativeLayout
继承并在merge
标签内使用一个RelativeLayout
来保持位置,那么是否会形成重复的层次结构? - 4gus71n<merge>
,以避免重复容器。 - CommonsWare