在布局中动态添加布局?

时间:2014-03-06 11:27:26

标签: android layout

我有一个布局,我需要在某些带有文本的块中插入 - 比如注释日期,名称,文本。有没有办法像这样使用它

 for (int r=0; r<10;r++) {
      TextView t1=(TextView) findviewbyid(R.id.text1);
      t1="BlaBla";
      mainlayout.add(commentLayout);
 }

所以我得到了类似listview但没有适配器等的东西。

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

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Name"
    android:id="@+id/comm_name"
    android:layout_marginLeft="20dp"
    android:layout_marginTop="24dp"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="Date"
    android:id="@+id/comm_date"
    android:layout_alignParentTop="true"
    android:layout_alignParentRight="true"
    android:layout_alignParentEnd="true"
    android:layout_margin="20dp" />

<TextView
    android:layout_width="wrap_content"
    android:layout_height="wrap_content"
    android:text="New Text"
    android:layout_alignParentTop="true"
    android:layout_alignParentLeft="true"
    android:layout_alignParentStart="true"
    android:layout_marginTop="60dp"
    android:layout_marginLeft="20dp"
    android:id="@+id/comm_text" />

4 个答案:

答案 0 :(得分:5)

你可以这样做,但是你这样做会引发异常,因为findViewById总是返回相同的对象,并且在第一次迭代后t1已经有了父对象。您应该在每次迭代时以编程方式创建TextView的新实例。

答案 1 :(得分:5)

尝试在滚动视图内部的线性布局中动态添加视图。

试试这个代码。我知道这不是确切的解决方案。但是,希望它能给你一些想法。

public class MainActivity extends Activity {

    ScrollView scrollview;
    LinearLayout  linearLayout;
    LinearLayout.LayoutParams layoutParams;
    static int i;
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        scrollview = (ScrollView)findViewById(R.id.scrollview);
        linearLayout = (LinearLayout)findViewById(R.id.linearlayout);
        Button button = (Button)findViewById(R.id.button);
        layoutParams = new LinearLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);

        button.setOnClickListener(new OnClickListener(){

            public void onClick(View v) {
                TextView view = new TextView(MainActivity.this);             
                view.setText(++i+" view");
                linearLayout.addView(view, layoutParams); 
            }

        });

}}

答案 2 :(得分:1)

使用以下方法

循环添加动态视图到线性布局

TextView textView1, textView2;
LinearLayout completeLinearLayout = (LinearLayout) findViewById(R.id.ll);
for (int i = 0; i < 10; i++) {
        textView1 = new TextView(Activity.this);
        textView2 = new TextView(Activity.this);
        String name1 = "xyz";
        String name2 = "abc"
        completeLinearLayout.addView(textView1);
        completeLinearLayout.addView(textView2);
        setTextViewParam(textView1, name1);
        setTextViewParam(textView2, name2);

    }

动态设置TextView参数的方法

private void setTextViewParam(TextView tv, String text) {

    LayoutParams textLayoutParams = new LayoutParams(LinearLayout.LayoutParams.WRAP_CONTENT,
            LinearLayout.LayoutParams.WRAP_CONTENT);
    textLayoutParams.setMargins(5, 0, 0, 0);
    tv.setGravity(Gravity.LEFT);
    tv.setText(text);
    tv.setTextSize(13);
    tv.setTextColor(Color.BLACK);
    tv.setLayoutParams(textLayoutParams);

}

现在您可以根据需要和容器自定义视图。 快乐编码!!

答案 3 :(得分:-1)

所以,这段代码可以正常工作。 它有什么问题吗?

public class InflateView extends Activity {

LinearLayout lLayout;
TextView t,f;


@Override
public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    final LayoutInflater  inflater = (LayoutInflater)getSystemService(Context.LAYOUT_INFLATER_SERVICE);
    lLayout = (LinearLayout)findViewById(R.id.layout1);

    for (int i=0;i<10;i++)
    {
            RelativeLayout tv = (RelativeLayout)inflater.inflate(R.layout.text, null);
            lLayout.addView(tv);
            t = (TextView) tv.findViewById(R.id.ttt);
            t.setText("aaaaaaa" + i)  ;
            f = (TextView) tv.findViewById(R.id.textView);
            f.setText(String.valueOf(i));
    }
}}