创建没有额外视图层次结构的自定义视图

时间:2013-10-15 00:16:51

标签: android

我通常会创建一个自定义视图,例如

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); 

      }

    }

2 个答案:

答案 0 :(得分:4)

res/layout/view_layout.xmla <merge> element开头,而不是LinearLayout

答案 1 :(得分:0)

<merge>是解决方案,但是您的布局在IDE的“设计”模式下显示不正确,这可能会很麻烦。要解决此问题,您需要:

<merge
    tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
    tools:layout_width="match_parent"
    tools:layout_height="match_parent">