Android:使用 XML 进行模板化

Android: Templating with XML

所以我是 Android 开发的新手,我遇到了以下情况:

<LinearLayout
    android:id="@id/child_1" 
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:orientation="horizontal">

    <TextView
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="">

    <Button
        android:layout_weight="1"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:text="">
</LinearLayout>

问题是我必须重复此 Horizo​​ntal LinearLayout 未知次数,为每个新实例动态添加 TextView 和 Button 的文本字段。 Horizo​​ntal LinearLayout 的每个新实例都必须添加到现有的 Vertical LinearLayout.

所以初始的Vertical LinearLayout:

<LinearLayout
    android:id="@id/parent"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

</LinearLayout>

然后基于动态实现:

<LinearLayout
    android:id="@id/parent"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:orientation="vertical">

    <LinearLayout
        android:id="@id/child_1">        
    </LinearLayout>

    <LinearLayout
        android:id="@id/child_2">        
    </LinearLayout>

</LinearLayout>

有什么方法可以像我描述的那样完成吗?我在示例中使用的 XML 元素是基本情况。我实际使用的那些具有与之关联的样式属性,所以我只想在 XML 中创建第一个 Horizo​​ntal LinearLayout 然后以编程方式访问它,添加所需的字段,然后将其设置为 Vertical LinearLayout.

的子项

您可以动态创建子元素并将它们添加到父垂直 LinearLayout。 请检查以下代码:我为每个创建的行使用了一个 TextView 和一个 Spinner:

    //--- Row Layout ---
    LinearLayout rowLayout = null;
    LinearLayout.LayoutParams rowLayoutparams = new LinearLayout.LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT);

    /** Create the TextViews and Spinners */
    for (int j=0; j<gameArray.length; j++) {   
       //Create new row
       rowLayout = new LinearLayout(getActivity().getApplicationContext());
       rowLayout.setLayoutParams(rowLayoutparams);
       rowLayout.setGravity(Gravity.CENTER_HORIZONTAL);

        //--- TEXT VIEW ---
        TextView myTextView = new TextView(getActivity().getApplicationContext());
        myTextView.setId(j);
        myTextView.setText("CONTENT");
        myTextView.setGravity(Gravity.CENTER);

        //--- SPINNER ---
        spinnersArray[j] = new Spinner(getActivity().getApplicationContext());
        spinnersArray[j].setId(j+100); //set a different ID
        //Populate the spinner here ...

        //--- LAYOUT PARAMS ---
        LinearLayout.LayoutParams itemParams = new LinearLayout.LayoutParams(100, 100);        //first and last item
        //edit the item params here ...

        //Add the params to the Views
        myTextView.setLayoutParams(itemParams);
        spinnersArray[j].setLayoutParams(itemParams);

        //--- Add the view to the Layout ---
        rowLayout.addView(myTextView);
        rowLayout.addView(spinnersArray[j]);

        //--- Add the row to the layout only if (NOT even) OR the chars are finished ---          
        ((LinearLayout)getView().findViewById(R.id.parent)).addView(rowLayout);
    }