我有一个要求,其中有2个以编程方式生成的屏幕和2个xml布局。现在我需要动态组合,这些布局多次。
对于ex,我有屏幕1 - 以编程方式创建,屏幕2 - 以编程方式创建,屏幕3-来自xml布局,屏幕4 - 来自xml布局
我的最终版面设计应该是一个屏幕,屏幕1,屏幕2,屏幕3,屏幕4,屏幕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)
您可以查看碎片。他们似乎完全按照你的需要做。以下是指向Training和API Guides的链接。
在您的xml文件中,您可以在LinearLayout
父级中指定4个子布局,每个布局都包含属性android:layout_weight="1"
,因此每个子布局只占用相同的空间量。如果是纵向,建议设置android:layout_width="match_parent
和android:layout_height="0dp"
现在,您可以将每个子布局的ID标记为id1,id2,id3等,但您也可以标记两个布局将创建类似android:id="@+id/fragment_container_first
和android: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。例如,稍后,您可以在运行时将前两个片段替换为其他片段,从而提高灵活性。您甚至可以为不同的屏幕尺寸设置不同的用户界面,在手机上使用更紧凑的视图,但在更大的屏幕上提供更多功能,例如平板电脑。
我很乐意听到这帮你了!