对齐TableRow中的组件

时间:2012-07-17 17:37:51

标签: android android-layout tablerow android-tablelayout

首先,我必须在运行时创建所有组件。好吧,我有一个TableLayout,在这个表视图中有一堆TableRow。在每个TableRow内,应该有:

  • 右侧的Button具有给定的固定高度和给定的固定宽度
  • 一个TextView填充TableRow被允许包装其文字的“休息”

TableRow的高度应该是Button高度和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);
    }

在这种情况下,只显示按钮,左侧更差!

1 个答案:

答案 0 :(得分:0)

假设您在正确的索引处添加TextViewButtonCHILD_INDEX_TVCHILD_INDEX_B01,尽管您可以放下它们,只是按照正确的顺序添加视图)布局中的一个坏处是你设置为LayoutParams的{​​{1}},该视图没有显示:

TextView

首先,TableLayout.LayoutParams tvParams = new TableLayout.LayoutParams( TableLayout.LayoutParams.MATCH_PARENT, android.view.ViewGroup.LayoutParams.WRAP_CONTENT); TextView的孩子,所以你应该设置TableRow而不是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