2012-07-17 50 views
0

首先,我的所有组件都必须在运行时创建。那么,我有一个TableLayout,并在此表内查看一堆TableRow。里面每TableRow,应该有:对齐TableRow中的组件

  • 一个Button在具有给定的固定高度和给定的固定宽度
  • 一个TextView,填补了“休息”的TableRow也是可以的包裹它的文本右侧

TableRow的高度应Button高度max和TableRow高度。我无法设置高度Button,或者只显示其中一个元素(TableRowButton)。

也许有人可以帮助我。

我当前的代码:

// fetching the table layout 
    final TableLayout tl = (TableLayout) findViewById(R.id.ShoppingListTableLayout); 
    tl.removeAllViews(); 

    // creating a single layout for every component 
    TableLayout.LayoutParams tableRowParams = new TableLayout.LayoutParams(
     TableLayout.LayoutParams.WRAP_CONTENT, TableLayout.LayoutParams.MATCH_PARENT); 
    tableRowParams.setMargins(0, 1, 0, 1); 

    TableRow.LayoutParams bParams = new TableRow.LayoutParams(m_Resources 
     .getDimensionPixelSize(R.dimen.ButtonWidth), m_DefaultButtonHeight_px); 

    TableLayout.LayoutParams tvParams = new TableLayout.LayoutParams(
     TableLayout.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT); 

    Iterator<xy> itr = ... 

    while (itr.hasNext()) { 
     final xy = itr.next(); 
     final TableRow tr = new TableRow(this); 
     tr.setLayoutParams(tableRowParams); 

     // 1. Child: TextView 
     final TextView CurrTxtView = new TextView(this); 
     CurrTxtView.setPadding(TV_PADDING_PX, TV_PADDING_PX, TV_PADDING_PX, TV_PADDING_PX); 
     CurrTxtView.setTextSize(TV_TEXT_SIZE); 
     CurrTxtView.setTypeface(m_Font); 
     CurrTxtView.setTextColor(TEXT_ACTIVE_COLOR); 
     CurrTxtView.setText(CurrItem.GetName()); 
     CurrTxtView.setLayoutParams(tvParams); 
     tr.addView(CurrTxtView, CHILD_INDEX_TV); 

     // 2. Child Button ("Edit" für aktive, "Delete" für inaktive) 
     final Button MyButton = new Button(this); 
     MyButton.setTextColor(TEXT_ACTIVE_COLOR; 
     MyButton.setText(m_Resources.getString(CurrItem.GetIsActive() ? R.string.EditString 
      : R.string.DeleteString)); 
     MyButton.setLayoutParams(bParams); 
     MyButton.setTypeface(m_Font); 
     MyButton.setOnClickListener(new View.OnClickListener() 
     { 

     @Override 
     public void onClick(View v) 
     {... } 
     }); 

     tr.addView(MyButton, CHILD_INDEX_B); 

     tr.setPadding(m_TableRowPadding_px, 0, m_TableRowPadding_px, 0); 
     tr.setGravity(Gravity.CENTER_VERTICAL); 

tl.addView(tr, 0); 
    } 

在这种情况下,仅显示按钮,甚至左侧差!

回答

0

假设你添加在正确的索引(CHILD_INDEX_TVCHILD_INDEX_B01,虽然你可以只把它们和刚才添加的意见,正确的顺序),在布局坏事是LayoutParamsTextViewButton您设置的TextView,认为不露面:

TableLayout.LayoutParams tvParams = new TableLayout.LayoutParams(
     TableLayout.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT); 

首先,在TextViewTableRow的孩子,所以你应该设置TableRow.LayoutParams而不是TableLayout.LayoutParams,其次我不理解为什么你突然决定离开TableLayout.LayoutParams,并去android.view.ViewGroup.LayoutParams视图的高度。到底应该是:

TableRow.LayoutParams tvParams = new TableRow.LayoutParams(
       TableRow.LayoutParams.MATCH_PARENT, 
       TableRow.LayoutParams.WRAP_CONTENT); 

要通过推动Button到右侧,你可以简单地伸展与TextView列:

tl.setColumnStretchable(0, true); 
+0

嗯,说实话,我不明白,要么,我做了什么。我仍然不明白这整个布局的东西。 但无论如何,谢谢你的回答,它完美的作品! :) – 2012-07-17 20:18:20