Android 以编程方式组合几种类型的xml布局

Android 以编程方式组合几种类型的xml布局,android,android-layout,android-linearlayout,Android,Android Layout,Android Linearlayout,我有一个需求,其中有2个编程生成的屏幕和2个xml布局。现在我需要在飞行中结合,这些布局多次 例如,我有屏幕1——编程创建,屏幕2——编程创建,屏幕3——来自xml布局,屏幕4——来自xml布局 我的最终布局设计应该是一个屏幕,屏幕1,屏幕2,屏幕3,屏幕4,屏幕2。。。根据屏幕输入的数量,所有屏幕共享相等的屏幕空间。请告诉我方法。有些屏幕具有相对布局,有些屏幕具有线性布局。所以它应该把这些结合起来 您需要在主布局上调用addView()。构建主布局(包含所有其他布局)后,addView()方法

我有一个需求,其中有2个编程生成的屏幕和2个xml布局。现在我需要在飞行中结合,这些布局多次

例如,我有屏幕1——编程创建,屏幕2——编程创建,屏幕3——来自xml布局,屏幕4——来自xml布局


我的最终布局设计应该是一个屏幕,屏幕1,屏幕2,屏幕3,屏幕4,屏幕2。。。根据屏幕输入的数量,所有屏幕共享相等的屏幕空间。请告诉我方法。有些屏幕具有相对布局,有些屏幕具有线性布局。所以它应该把这些结合起来

您需要在主布局上调用
addView()
。构建主布局(包含所有其他布局)后,
addView()
方法将向现有主布局添加新视图

要添加新布局,首先需要将其充气

LinearLayout primaryLayout;

LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
LinearLayout newLayout = (LinearLayout)layoutInflater.inflate(R.layout.your_new_layout, null, false);

primaryLayout.addView(newLayout);
AddView还提供了一个索引选项,用于将新布局放置在主布局中的特定点上

尝试从一个空白的XML布局(例如称为主布局)开始:

然后可以将新视图添加到该视图中。至于多次添加,我相信它是通过引用完成的,所以它只看到一个视图。尝试在方法中构建视图,然后返回视图。例如:

private View buildNewView(){

    LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService( Context.LAYOUT_INFLATER_SERVICE );  
    LinearLayout newView = (LinearLayout)layoutInflater.inflate( R.layout.my_new_view null, false );


    return newView ;
}

并通过
primaryLayout.addView(buildNewView();
调用它。您可以查看片段。它们似乎正是您所需要的。以下是指向和的链接。

在xml文件中,您可以在
LinearLayout
父级中指定4个子布局,每个布局都有一个属性
android:layout\u weight=“1”
,因此每个子布局只会占用相同的空间。如果是纵向布局,建议设置
android:layout\u width=“match\u parent
android:layout\u height=“0dp“
现在,您可以将每个子版面的id标记为id1、id2、id3等,但也可以将要创建的两个版面标记为类似于
android:id=“@+id/fragment\u container\u first
android:id=”@+id/fragment\u container\u在Java代码中,您可以将contentView设置为xml文件的id(
setContentView(R.layout.myXMLLayout);
),按照上面提供的培训指南链接创建片段的两个实例,并使用类似于
getSupportFragmentManager().beginTransaction()的方法将这些视图添加到前面在xml文件中设置的容器中
.add(R.id.fragment_container_first,firstFragment).commit();
getSupportFragmentManager().beginTransaction()

.add(R.id.fragment_container_second,secondFragment).commit();
(如果您正在使用支持库,培训指南将使用该库)

我真的希望这能帮到你。你可以用片段构建一个非常灵活的UI。例如,以后,你可以在运行时用其他片段替换前两个片段,增加灵活性。你甚至可以为不同的屏幕大小设置不同的UI,在手机上有更紧凑的视图,但在lar上可以提供更多屏幕就像平板电脑一样。

如果这对你有帮助,我很想听到你的回复!

谢谢你的回复,我按照你说的做了。RelativeLayout primaryLayout=new RelativeLayout(this);LayoutFlater LayoutFlater=(LayoutFlater)this.getSystemService(Context.LAYOUT\u INFLATER\u SERVICE);RelativeLayout newLayout=(RelativeLayout)LayoutFlater.inflate(R.layout.layout3,null,false);RelativeLayout newLayout1=(RelativeLayout)LayoutFlater.inflate(R.layout.layout4,null,false);primaryLayout.addView(newLayout);primaryLayout.addView(newLayout1);setContentView(primaryLayout);但是,只有最后一个视图被添加,你能告诉我是这样吗?另外,我不能多次添加同一个视图,它会给出一个错误,说明指定的子视图已经有父视图,第一次调用removeview@bharath试试我的答案。它使用片段来做你想做的事情。你甚至可以在Fragm中指定XML文件或运行时创建的布局恩茨。
setContentView(R.layout.primary_layout);
LinearLayout primaryLayout = (LinearLayout) findViewById(R.id.primaryLayout);
private View buildNewView(){

    LayoutInflater layoutInflater = (LayoutInflater)this.getSystemService( Context.LAYOUT_INFLATER_SERVICE );  
    LinearLayout newView = (LinearLayout)layoutInflater.inflate( R.layout.my_new_view null, false );


    return newView ;
}