以编程方式将几种类型的xml布局组合在一起

时间:2013-03-15 15:38:12

标签: android android-layout android-linearlayout

我有一个要求,其中有2个以编程方式生成的屏幕和2个xml布局。现在我需要动态组合,这些布局多次。

对于ex,我有屏幕1 - 以编程方式创建,屏幕2 - 以编程方式创建,屏幕3-来自xml布局,屏幕4 - 来自xml布局

我的最终版面设计应该是一个屏幕,屏幕1,屏幕2,屏幕3,屏幕4,屏幕2 ...所有屏幕根据我输入的屏幕数量共享相同的屏幕空间。请让我知道这个方法。有些屏幕具有相对布局和一些线性屏幕。所以它应该结合这些。

2 个答案:

答案 0 :(得分:3)

您需要在主布局上调用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布局开始(比如称为primary_layout):

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:id="@+id/primaryLayout"
    android:layout_width="match_parent"
    android:layout_height="match_parent" >


</RelativeLayout>

然后,当您的活动开始时,先将其设置,然后根据需要进行充气和添加:

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

并通过primaryLayout.addView(buildNewView();调用。

答案 1 :(得分:0)

您可以查看碎片。他们似乎完全按照你的需要做。以下是指向TrainingAPI Guides的链接。

在您的xml文件中,您可以在LinearLayout父级中指定4个子布局,每个布局都包含属性android:layout_weight="1",因此每个子布局只占用相同的空间量。如果是纵向,建议设置android:layout_width="match_parentandroid:layout_height="0dp"现在,您可以将每个子布局的ID标记为id1,id2,id3等,但您也可以标记两个布局将创建类似android:id="@+id/fragment_container_firstandroid:id="@+id/fragment_container_second的内容。

在Java代码中,您将contentView设置为xml文件的id(setContentView(R.layout.myXMLLayout);),按照我上面提供的培训指南链接创建片段的两个实例,然后使用getSupportFragmentManager().beginTransaction() .add(R.id.fragment_container_first, firstFragment).commit();getSupportFragmentManager().beginTransaction() .add(R.id.fragment_container_second, secondFragment).commit();之类的内容将这些视图添加到先前在xml文件中设置的容器中(如果您使用的话)支持库,这是培训指南使用的。)
我真的希望这可以帮到你。您可以使用Fragments构建一个非常灵活的UI。例如,稍后,您可以在运行时将前两个片段替换为其他片段,从而提高灵活性。您甚至可以为不同的屏幕尺寸设置不同的用户界面,在手机上使用更紧凑的视图,但在更大的屏幕上提供更多功能,例如平板电脑。

我很乐意听到这帮你了!