5

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

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

      }

    }
4

2 回答 2

4

元素不是. res/layout/view_layout.xml_<merge>LinearLayout

于 2013-10-15T00:18:28.853 回答
0

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

<merge
    tools:parentTag="androidx.constraintlayout.widget.ConstraintLayout"
    tools:layout_width="match_parent"
    tools:layout_height="match_parent">
于 2020-01-18T10:44:18.117 回答