Android: динамически добавлять TextView в TableLayout с фиксированной шириной - PullRequest
1 голос
/ 13 декабря 2011

У меня проблема с моим приложением для Android.Я хочу динамически создавать TableRow в TableLayout.Каждая из этих строк должна содержать 4 TextViews.Я хочу, чтобы TextView был таким:

  • textview1: 40% экрана
  • textview2: 10% экрана
  • textview3: 10% экрана
  • textview5: 40% экрана

Мне удается создать Tewtview динамически, но размер не учитывается.Например, если мое первое текстовое представление содержит большой текст, оно покрывает весь экран, а не только 40% и многострочное.

Я прочитал много похожих вопросов, но не могу найти решение здесь.Вот мой файл макета:

    <TableLayout xmlns:android="http://schemas.android.com/apk/res/android"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
android:stretchColumns="1"
android:layout_marginLeft="10dip"
android:layout_marginRight="10dip"
android:layout_marginBottom="30dip"
android:id="@+id/journee_contenu">

<TableRow>
  <!-- Column 1 -->
  <TextView
     android:id="@+id/tbl_txt1"
     android:layout_width="0dip"
     android:layout_height="wrap_content"
     android:layout_weight="4"
     android:text="aaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaaa"
      />

  <!-- Column 2 -->
  <TextView
     android:id="@+id/tbl_txt2"
     android:layout_width="0dip"
     android:layout_height="wrap_content"
     android:layout_weight="1"
     android:text="bbbbb"
     />

  <!-- Column 3 -->
  <TextView
     android:id="@+id/tbl_txt3"
     android:layout_width="0dip"
     android:layout_height="wrap_content"
     android:layout_weight="1"
     android:text="ccccc"
      />
      <!-- Column 4 -->
  <TextView
     android:id="@+id/tbl_txt4"
     android:layout_width="0dip"
     android:layout_height="wrap_content"
     android:layout_weight="4"
     android:text="ddddddddddddddddddddddddddddddddddddddddddddddd"
      />
</TableRow>

Макет создает статическую вкладку с первой строкой, как я и хочу.Но динамически добавляемые строки не ведут себя одинаково.

Мой динамический код:

    TableLayout genLayout = (TableLayout) findViewById(R.id.journee_contenu);
for (MatchWrapper match : matchs) {
    TableRow tr1 = new TableRow(this);
    TextView tvEq1 = new TextView(this);
    tvEq1.setText(match.getEquipe1());
    TextView tvSc1 = new TextView(this);
    tvSc1.setText(match.getScore_equipe1());
    TextView tvSc2 = new TextView(this);
    tvSc2.setText(match.getScore_equipe2());
    TextView tvEq2 = new TextView(this);
    tvEq2.setText(match.getEquipe2());
    tr1.addView(tvEq1);
    tr1.addView(tvSc1);
    tr1.addView(tvSc2);
    tr1.addView(tvEq2);
    genLayout.addView(tr1);
}

Мой объект сопоставления содержит только строку с различным размером.Большое спасибо за вашу помощь

1 Ответ

6 голосов
/ 13 декабря 2011

Причина, по которой вы динамически добавили TableRows, делает не так, как вам бы хотелось, в том, что вы не установили LayoutParams для TableRow и TextViews.

На каждый TextView вы добавляете LayoutParams, например:

tvEq1.setLayoutParams( new TableRow.LayoutParams( 0, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 4 ) );
tvSc1.setLayoutParams( new TableRow.LayoutParams( 0, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 1 ) );
tvSc2.setLayoutParams( new TableRow.LayoutParams( 0, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 1 ) );
tvEq2.setLayoutParams( new TableRow.LayoutParams( 0, android.view.ViewGroup.LayoutParams.WRAP_CONTENT, 4 ) );

Последний параметр LayoutParams -конструктора - layout_weight.

Вам необходимо добавить LayoutParams перед добавлением TextViews к TableRow.

Возможно, вам придется добавить LayoutParams к вашему TableRow, а также.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...