0

まず、すべてのコンポーネントを実行時に作成する必要があります。さて、私は を持ってTableLayoutおり、このテーブル ビューの中にたくさんの がありTableRowます。everyTableRowの中には、次のものが必要です。

  • Button所定の固定高さと所定の固定幅を持つ右側のa
  • テキストをラップすることが許可されているTextViewの「残り」を埋めるaTableRow

の高さは、高さと高さTableRowの最大値である必要があります。高さの設定に失敗するか、要素 (または) の 1 つだけが表示されます。ButtonTableRowButtonTableRowButton

誰かが私を助けてくれるかもしれません。

私の現在のコード:

    // 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);
    }

この場合、ボタンだけが表示され、さらに悪いことに左側に表示されます!

4

1 に答える 1

0

と を正しいインデックスに追加すると仮定すると (TextViewとはと、それらを削除してビューを正しい順序で追加することもできますが)、レイアウトの悪い点は、に設定したビューです。表示されない:ButtonCHILD_INDEX_TVCHILD_INDEX_B01LayoutParamsTextView

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

まず第一に、TextViewは a の子であるTableRowため、 and を設定しTableRow.LayoutParamsないでください。次に、ビューの高さのために を離れてに行くTableLayout.LayoutParamsことにした理由がわかりません。最終的には次のようになります。TableLayout.LayoutParamsandroid.view.ViewGroup.LayoutParams

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

を右に押すには、次を使用しButtonて列を単純に引き伸ばすことができます。TextView

tl.setColumnStretchable(0, true);
于 2012-07-17T19:14:30.393 に答える