以编程方式向布局添加多个自定义视图

如果我例如有这样的空布局:

layout1.xml

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > </LinearLayout> 

还有一些其他的布局是这样的:

layout2.xml

 <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="horizontal" > <TextView android:id="@+id/button1" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="TextView 1" /> <Button android:id="@+id/button2" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button 2" /> <Button android:id="@+id/button3" android:layout_width="wrap_content" android:layout_height="wrap_content" android:text="Button 3" android:layout_weight="1"/> </LinearLayout> 

我想以编程方式将layout2.xml添加到layout1.xml 。 我需要有多个不同的版本layout2.xml ,当我想要添加时。 每个人在TextView和Buttons上都有不同的文本。

在常规的Android视图的情况下,我通常会这样做addView

 public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); TextView tv1 = new TextView(this); tv1.setText("HELLO"); my_linear_layout.addView(tv1); Button btn2 = new Button(this); bt2.setText("WORLD"); my_linear_layout.addView(btn2); } 

我怎么能做到这一点,如果我没有像TextView或Button这样简单的东西,如果我有我自己的XML定义的视图?

是否有可能以某种方式把适配器内的所有视图像ListView一样,然后在需要的时候得到它,然后在这些视图上调用addView

Solutions Collecting From Web of "以编程方式向布局添加多个自定义视图"

您可以通过膨胀layout2.xml文件,编辑文本,并将其添加到第一个布局:

 public class MyActivity extends Activity { private ViewGroup mLinearLayout; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout1); mLinearLayout = (ViewGroup) findViewById(R.id.linear_layout); addLayout("This is text 1", "This is first button", "This is second Button"); } private void addLayout(String textViewText, String buttonText1, String buttonText2) { View layout2 = LayoutInflater.from(this).inflate(R.layout.layout2, mLinearLayout, false); TextView textView = (TextView) layout2.findViewById(R.id.button1); Button button1 = (Button) layout2.findViewById(R.id.button2); Button button2 = (Button) layout2.findViewById(R.id.button3); textView1.setText(textViewText); button1.setText(buttonText1); button2.setText(buttonText2); mLinearLayout.addView(layout2); } } 

您可能需要将layout2.xml根视图的android:layout_height更改为wrap_content

layout1包含ScrollView作为父布局,主LinearLayout作为子项,如果没有行项目更多的屏幕大小ScrollView处理带滚动的溢出项目:

layout1.xml

 <ScrollView xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent"> <LinearLayout android:id="@+id/my_linear_layout" android:layout_width="match_parent" android:layout_height="wrap_content" android:orientation="vertical"> </LinearLayout> </ScrollView> 

使用LayoutInflater在父LinearLayout中添加行项目:

 private LinearLayout my_linear_layout; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.layout1); my_linear_layout = (LinearLayout) findViewById(R.id.my_linear_layout); for(int i=1;i<=5;i++){ View view = LayoutInflater.from(this).inflate(R.layout.layout2,null); TextView button1 = (TextView) view.findViewById(R.id.button1); Button button2 = (Button) view.findViewById(R.id.button2); TextView button3 = (TextView) view.findViewById(R.id.button3); button1.setText("HELLO " + i); button2.setText("HELLO "+i); button3.setText("HELLO "+i); my_linear_layout.addView(view); } } 

试试这个方法

将id添加到linearlayout layout1.xml

  <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:id="@+id/firstlayout" android:layout_width="fill_parent" android:layout_height="fill_parent" android:orientation="vertical" > </LinearLayout> 

在创造

  LinearLayout firstlayout=(LinearLayout)findviewbyId(R.id.firstlayout); LinearLayout secondlayoout=(LinearLayout)this.getLayoutInflater().inflate(R.layout.layout2,null); //inflating view from xml TextView btn1=(TextView)secondlayoout.findviewbyId(R.id.button1); btn1.settext("TEST"); firstlayout.addview(secondlayoout);