以编程方式在线性布局中添加表格布局

时间:2012-06-13 23:22:13

标签: android android-layout android-linearlayout android-tablelayout

我基本上想要这样的东西:

  TextView
  Button
  Button
  .
  .
  .
  TextView   TextView
  SeekBar
  Button

我必须以编程方式执行此操作。 现在,除了SeekBar上方的TextViews没有显示之外,我还能正常工作。

正在执行此工作的相关代码是

//Setting the linear layout
    ll =  new LinearLayout(getApplicationContext());                //a linear layout encompasses all the other elements
    ll.setOrientation(LinearLayout.VERTICAL);   //orientation has to be vertical
    ll.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT));     //the layout occupies the complete screen

    //Set the TextView for the Question
    tv1 = new TextView(getApplicationContext());
    tv1.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));    //sets the dimensions of the textView
    ll.addView(tv1);                            //add the TextView to the LinearLayout

    //Set the buttons (?)
    b = new Button [MAX_OPTIONS];               
    for(int i=0;i<MAX_OPTIONS;i++){
        b[i] = new Button(getApplicationContext());     //set the context for each button
        b[i].setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
        ll.addView(b[i]);
    }

    //Set the Table Layout
    tl = new TableLayout(getApplicationContext());
    tl.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    tl.setColumnStretchable(0, true);
    tl.setColumnStretchable(1, true);

    //Set the Table Row
    tr = new TableRow(getApplicationContext());
    tr.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    tr.setPadding(dipConvert(5), dipConvert(5), dipConvert(5), dipConvert(5));

    //Set the two TextViews
    tv2 = new TextView(getApplicationContext());
    tv2.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    tv2.setGravity(Gravity.LEFT);               //set the gravity of this TextView to left
    tv3 = new TextView(getApplicationContext());
    tv3.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));
    tv3.setGravity(Gravity.RIGHT);
    tv3.setPadding(0, 0, dipConvert(15), 0);    //set the padding for this to be displayed(the number 15 was emperically determined)

    //Add the Textview to table row
    tr.addView(tv2);        tr.addView(tv3);

    //Add the TableRow to the Table Layout
    tl.addView(tr);

    //Add the TableLayout to the LinearLayout
    ll.addView(tl);

    //Set the Seekbar
    sb1 = new SeekBar(getApplicationContext());
    sb1.setLayoutParams(new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.WRAP_CONTENT));
    sb1.setMax(100);
    sb1.setMinimumWidth(250);
    ll.addView(sb1);

    //Set the Seekbar Button
    sb1_b = new Button(getApplicationContext());
    sb1_b.setLayoutParams(new LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.WRAP_CONTENT));

    ll.addView(sb1_b);
            setContentView(ll);

我无法弄清楚发生了什么。我得到的显示就像是

   TextView
   Button
   Button
   .
   .
   .

   SeekBar
   Button

如果有人能指出我正确的方向,那就太好了。

谢谢!

1 个答案:

答案 0 :(得分:2)

您需要在tableRow元素的子元素中使用TableRow.layout参数。这已得到很好的解释here。请参考并更正。这是一个非常简单的打嗝,很容易被忽略。

你的textview应该是

tv2.setLayoutParams(new TableRow.LayoutParams(TableRow.LayoutParams.WRAP_CONTENT, TableRow.LayoutParams.WRAP_CONTENT));

同样适用于tv3。