我通常会创建一个自定义视图,例如
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
以编程方式添加(因为定位很困难)。
拥有不必要的层次结构会减慢我的应用。
在没有额外层次结构级别的情况下创建custom views/view group
的最佳方法是什么。
根据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);
}
}
答案 0 :(得分:4)
让res/layout/view_layout.xml
以a <merge>
element开头,而不是LinearLayout
。
答案 1 :(得分:0)
<merge>
是解决方案,但是您的布局在IDE的“设计”模式下显示不正确,这可能会很麻烦。要解决此问题,您需要:
<merge
tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
tools:layout_width="match_parent"
tools:layout_height="match_parent">