如何在Android上动态添加LinearLayout?

时间:2012-02-01 15:17:51

标签: android android-linearlayout

我有一个长度为n的数组,我现在需要创建n个LinearLayouts并在每个上添加不同的东西。 如何动态完成?

3 个答案:

答案 0 :(得分:6)

LinearLayout lLayout = new LinearLayout(context);
parentWidget.addView(lLayout);

答案 1 :(得分:5)

最简单的方法是在xml中创建布局并使用

对其进行充气

LayoutInflater.from(context).inflate(R.layout.my_linear_layout);

您可能还需要setId()添加的观看次数,以便日后轻松访问。

答案 2 :(得分:4)

我使用RelativeLayout解决了它,我发现它更容易使用。是的当然,就像上面提到的那些人我使用setId()一样。这是我实施的代码:

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    ScrollView sv = new ScrollView(this);

    //Parent RelativeLayout
    parentLayout = new RelativeLayout(this);
    parentLayout.setBackgroundColor(Color.WHITE);
    params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
    parentLayout.setLayoutParams(params);
    sv.addView(parentLayout);

    final String[] comList = getCommunication();
    int listLength=0;
    try{
    listLength= comList.length/3;
    }catch(Exception e){System.out.println(e);System.exit(0);}

    childLayout= new RelativeLayout[listLength] ;
    TextView[] tvName  = new TextView[listLength];
    TextView[] tvDate  =new TextView[listLength];
    TextView[] tvMsg =new TextView[listLength];

    for(int i =0;i<listLength;i++){
        try{

        childLayout[i] = new RelativeLayout(this);
        childLayout[i].setPadding(5, 5, 5, 5);
        params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, 75);
        if(i==0){params.addRule(RelativeLayout.BELOW);}
        else{params.addRule(RelativeLayout.BELOW,i);}
        childLayout[i].setId(i+1);
        childLayout[i].setClickable(true);
        childLayout[i].setLayoutParams(params);
        childLayout[i].setOnClickListener(new OnClickListener(){
            @Override
            public void onClick(View v) {


                //Create the intent
                  Intent i = new Intent("ACTIIVTY");
                   startActivity(i);
            }       
        });

        tvName[i] = new TextView(this);
        params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        params.addRule(RelativeLayout.ALIGN_PARENT_LEFT);
        tvName[i].setLayoutParams(params);
        childLayout[i].addView(tvName[i]);
        if(comList[i*3].length()>24){
            String name = comList[i*3].substring(0,24)+"...";
            tvName[i].setText(name);
        }else{
            tvName[i].setText(comList[i*3]);
        }
        tvName[i].setId(listLength+1+i);
        tvName[i].setTextSize(12);
        tvName[i].setTextColor(Color.BLACK);

        tvDate[i] = new TextView(this);
        params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        params.addRule(RelativeLayout.ALIGN_PARENT_RIGHT);
        tvDate[i].setLayoutParams(params);
        childLayout[i].addView(tvDate[i]);
        tvDate[i].setTextSize(11);
        tvDate[i].setTextColor(Color.BLUE);
        tvDate[i].setText(comList[i*3+1]);


        tvMsg[i] = new TextView(this);
        params = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT);
        params.addRule(RelativeLayout.BELOW, listLength+1+i);
        tvMsg[i].setLayoutParams(params);
        childLayout[i].addView(tvMsg[i]);
        tvMsg[i].setTextSize(11);
        tvMsg[i].setTextColor(Color.GRAY);
        if(comList[i*3+2].length()>96){
            String msg = comList[i*3+2].substring(0,96)+"...";
            tvMsg[i].setText(msg);
        }else{
            tvMsg[i].setText(comList[i*3+2]);
        }

        parentLayout.addView(childLayout[i]);

        }catch(Exception e){System.out.println("Errrorrrrr");}
    }

    setContentView(sv);
}