1

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

For ex, i have screen 1 - programatically created, screen 2 - programatically created, screen 3- from a xml layout, screen 4 - from a xml layout

My final layout design should be a single screen with screen1, screen2, screen 3, screen 4, screen 2... with all screens sharing equal screen space based on the number of screen i input. Please let me know the approach. Some screens are having relative layout and some linear ones. So it should combine these.

4

2 回答 2

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

于 2013-03-15T15:48:06.467 回答
0

你可以看看碎片。他们似乎完全按照您的需要做。以下是它们的培训API 指南的链接。

在您的 xml 文件中,您可以在父项中指定 4 个子布局LinearLayout,每个子布局都有一个属性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();(如果您使用的是支持库,这就是培训指南使用)。

我真的希望这可以帮助你。您可以使用 Fragments 构建一个非常灵活的 UI。例如,稍后,您可以在运行时将前两个片段替换为其他片段,从而增加灵活性。您甚至可以为不同的屏幕尺寸设置不同的 UI,在手机上使用更紧凑的视图,但在平板电脑等更大的屏幕上提供更多功能。

如果这对您有所帮助,我很想听听!

于 2013-03-16T16:14:40.373 回答