以编程方式添加多个布局

时间:2016-05-05 19:52:57

标签: android android-layout

问题:如何将多个相对布局添加到现有相对布局。

请原谅我的无知,因为我仍处于自我学习android dev的过程中,我的理解仍然存在一些空白。

我的目标是使用此屏幕:Main Activity并将多个较小的相对布局添加到线性布局,在这种情况下,布局标题为rootWorkingLayout。现在,我的代码成功添加了一个较小的相对布局,如下所示:Main Activity

我看似难以捉摸的目标是在屏幕上分别有4个或5个这些在TextViews中有不同的数据(但这是下一步。对我来说)我不确定如何实现这一点。

主要活动Java类:

public class rootActivity extends AppCompatActivity {

private Toolbar toolbar; //Toolbar Declaration
public LinearLayout rootWorkingLayout;
public  static int i = 100; //previewCounter
//Main Function
@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.activity_root);
    toolbar =(Toolbar) findViewById(R.id.toolBar);
    rootWorkingLayout =  (LinearLayout) findViewById(R.id.rootWorkingLayout);
    setSupportActionBar(toolbar);
    Bundle previewReceiver = getIntent().getExtras();
    //If There is a Bundle, Process it
    if(previewReceiver != null) {
        newPreview(previewReceiver);
    }
}
//Create Options Menu
@Override
public boolean onCreateOptionsMenu (Menu menu) {
   MenuInflater inflater = getMenuInflater();
    inflater.inflate(R.menu.menu, menu);
    return true;
}
//Track Options Menu
@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_newReport: return true;
        case R.id.action_history: return true;
        case R.id.action_settings: return true;
        default: return super.onOptionsItemSelected(item);
    }
}
//Launch New Report Wizard
public void newReport (MenuItem menuItem)
{
    Intent startNewReport = new Intent(getApplicationContext(), reportGeneratorActivity.class);
    startActivity(startNewReport);//Go To Report Wizard
}
//Process New Preview
public void newPreview (Bundle previewReceiver) {
    //Extract Strings from Bundle
    String date = previewReceiver.getString("date");
    String client = previewReceiver.getString("client");
    String machine =previewReceiver.getString("machine");
    String serialNum = previewReceiver.getString("serial");
    //Create New Inflater
    LayoutInflater previewInflater = (LayoutInflater)this.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    View previewLayout = previewInflater.inflate(R.layout.previewplate, null);
    //Set Params
    LinearLayout.LayoutParams previewParams = new LinearLayout.LayoutParams(LinearLayout.LayoutParams.MATCH_PARENT, LinearLayout.LayoutParams.WRAP_CONTENT);
    previewLayout.setLayoutParams(previewParams);// Add Params to Preview Plate
    //Add previewLayout to rootWorkingLayout
    previewLayout.setId(i);
    //previewLayout.setID(i);//Assing new ID
    i += 100;//Increment ID
    rootWorkingLayout.addView(previewLayout);
    //TODO: Configure Preview Plate
}

}

以下是主要活动XML:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingBottom="@dimen/activity_vertical_margin"
tools:context="com.gdt.user.testgdt.rootActivity">

<android.support.v7.widget.Toolbar
    android:id="@+id/toolBar"
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:background="@color/colorPrimary"
    android:elevation="4dp"/>

<LinearLayout
    android:orientation="vertical"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:layout_alignParentBottom="true"
    android:layout_alignStart="@+id/toolBar"
    android:layout_below="@+id/toolBar"
    android:id="@+id/rootWorkingLayout"
    android:paddingTop="10dp"
    android:weightSum="1">

</LinearLayout>
</RelativeLayout>

这是相对布局的布局我试图多次添加到rootWorkingLayout:

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:orientation="vertical"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:id="@+id/previewReportPlate"
android:background="#D1D1D1"
android:layout_below="@+id/previewReportPlateLbl"
android:layout_alignParentStart="true">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceMedium"
android:text="Client Name"
android:id="@+id/clientNamePlate"
android:textColor="#000000"
android:paddingLeft="6dp"
android:paddingTop="6dp"
android:paddingRight="6dp"
android:paddingBottom="6dp"
android:layout_alignParentLeft="true"
android:layout_marginLeft="0dp"
android:layout_alignParentTop="true"
android:layout_marginTop="0dp" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Machine Type"
android:id="@+id/machineTypePlate"
android:textColor="#000000"
android:paddingLeft="6dp"
android:paddingTop="6dp"
android:paddingRight="6dp"
android:paddingBottom="6dp"
android:layout_marginLeft="0dp"
android:layout_below="@+id/clientNamePlate"
android:layout_alignParentStart="true" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceLarge"
android:text="Serial Number"
android:id="@+id/serialNumberPlate"
android:textColor="#000000"
android:paddingLeft="6dp"
android:paddingTop="6dp"
android:paddingRight="6dp"
android:paddingBottom="6dp"
android:layout_marginLeft="0dp"
android:layout_below="@+id/machineTypePlate" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="?android:attr/textAppearanceSmall"
android:text="Date"
android:id="@+id/datePlate"
android:layout_gravity="right"
android:textColor="#000000"
android:paddingRight="10dp"
android:layout_marginLeft="691dp"
android:layout_below="@+id/serialNumberPlate"
android:layout_alignParentEnd="true" />
</RelativeLayout>

我目前的想法是,这是previewLayout.setId或我需要在某处声明的规则的问题。可能我相信我需要构建某种循环,最终贯穿整个过程。但此时我觉得我需要帮助搞清楚如何添加多个previewPlate布局。

提前致谢!

1 个答案:

答案 0 :(得分:0)

  

目前,我的代码成功添加了一个较小的相对布局

当然,那是因为你只在onCreate中调用一次方法。

newPreview(previewReceiver);

您可以多次复制该行,您将看到多个布局。

  

我看似难以捉摸的目标是在屏幕上有4个或5个这些目标,每个都有不同的TextViews数据

每次调用方法设置不同的数据时,您将需要不同的Bundle,但您需要做的就是再次调用该方法。

如果您尝试使用工具栏中的加号按钮来执行此操作,则可以这样做

@Override
public boolean onOptionsItemSelected(MenuItem item) {
    switch (item.getItemId()) {
        case R.id.action_newReport: 
            Bundle b = new Bundle();
            // TODO: set some data in the bundle
            newPreview(b);
            return true;