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>
问题是我必须重复此 Horizontal LinearLayout 未知次数,为每个新实例动态添加 TextView 和 Button 的文本字段。 Horizontal 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 中创建第一个 Horizontal 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);
}