2013-10-02 2 views
0

Я динамически создаю строки таблицы и добавляю два текстовых элемента в новые строки. Выполнение этого отлично работает, но теперь я пытаюсь отформатировать LayoutParams, чтобы у двух TextViews был layout_weight по 1 каждый. Я попытался добавить некоторые LayoutParams, но похоже, что они игнорируются. Вот мой код для создания строк, и я прокомментировал бит LayoutParams, и нет никаких изменений при запуске приложения, которое говорит мне, что LayoutParams игнорируются. мне нужна помощь назначая layout_weight два TextViews, так что в моей рядном создании коды я могу достичь этого:в Android layout_weight для строк таблицы в динамической таблице

 <TextView 
     android:id="@+id/textView1" 
     android:layout_width="wrap_content" 
     android:layout_height="wrap_content" 
     android:layout_marginLeft="10dp" 
     android:layout_weight="1" /> 

Так вот мой код для создания строки:

 TableLayout tl = (TableLayout) findViewById(R.id.pres_table); 

    for (int ctr = 0; ctr < pres_res.size(); ctr++) 

    { 
     final String pst_str = pres_res.get(ctr); 
     final String yrs_str = yrs_res.get(ctr); 

     TableRow tr = new TableRow(this); 
     /* 
     TableRow.LayoutParams trPara = new TableRow.LayoutParams(
       TableRow.LayoutParams.MATCH_PARENT, 
       TableRow.LayoutParams.WRAP_CONTENT); 
     int leftMargin = 10; 
     int topMargin = 2; 
     int rightMargin = 10; 
     int bottomMargin = 2; 
     trPara.setMargins(leftMargin, topMargin, rightMargin, bottomMargin); 
     tr.setLayoutParams(trPara); 

     */ 
     TextView tv1 = new TextView(this); 
     tv1.setText(pst_str); 
     tv1.setTextColor(Color.BLACK); 
     tv1.setTextSize(18); 

     TextView tv2 = new TextView(this); 
     tv2.setText(yrs_str); 
     tv2.setTextColor(Color.BLACK); 
     tv2.setTextSize(18); 

     tr.addView(tv1); 
     tr.addView(tv2); 
     tl.addView(tr, new TableLayout.LayoutParams(
       LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
    } 

и XML для создания таблицы является базовым следующим образом:

  <TableLayout 
      android:id="@+id/pres_table" 
      android:layout_width="match_parent" 
      android:layout_height="match_parent" 
      android:background="#FFFFFF" > 
     </TableLayout> 

Спасибо!

+0

Я вижу ваши прокомментированные строки 'LayoutParams', но я не вижу« вес »в любом месте. В любом случае вы хотите установить вес в TextViews, а не в TableRows. – Geobits

ответ

0

Во-первых, благодаря Geobits для установки меня по правильной траектории и давая мне знать, что у меня были приглашения LayoutParams в неправильном месте. Они должны применяться к TextView, а не к Table Row. Затем, основываясь на этом, я нашел сообщение StackOverflow: Set the layout weight of a TextView programmatically, где вторым ответом было решение для меня. Так что теперь мой код выглядит следующим образом, и он работает так, как я хочу это:

 TableLayout tl = (TableLayout) findViewById(R.id.pres_table); 

    for (int ctr = 0; ctr < pres_res.size(); ctr++) 

    { 
     final String pst_str = pres_res.get(ctr); 
     final String yrs_str = yrs_res.get(ctr); 

     TableRow tr = new TableRow(this); 
     /* 
     TableRow.LayoutParams trPara = new TableRow.LayoutParams(
       TableRow.LayoutParams.MATCH_PARENT, 
       TableRow.LayoutParams.WRAP_CONTENT); 
     int leftMargin = 10; 
     int topMargin = 2; 
     int rightMargin = 10; 
     int bottomMargin = 2; 
     trPara.setMargins(leftMargin, topMargin, rightMargin, bottomMargin); 
     tr.setLayoutParams(trPara); 
     tr.setLayoutParams(new LayoutParams(
     LayoutParams.MATCH_PARENT,LayoutParams.MATCH_PARENT)); 

     */ 
     LayoutParams tvPar = new TableRow.LayoutParams(0,LayoutParams.WRAP_CONTENT, 1f); 
     TextView tv1 = new TextView(this); 
     tv1.setLayoutParams(tvPar); 
     tv1.setText(pst_str); 
     tv1.setTextColor(Color.BLACK); 
     tv1.setTextSize(18); 

     TextView tv2 = new TextView(this); 
     tv2.setLayoutParams(tvPar); 
     tv2.setText(yrs_str); 
     tv2.setTextColor(Color.BLACK); 
     tv2.setTextSize(18); 

     tr.addView(tv1); 
     tr.addView(tv2); 
     tl.addView(tr, new TableLayout.LayoutParams(
       LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT)); 
    } 

Прямо под закомментированное бит является решением показывает новый LayoutParams tvPar код.

1
// try this way 
     TextView tv1 = new TextView(this); 
     tv1.setLayoutParams(new TableRow.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1.0f)); 
     tv1.setText(pst_str); 
     tv1.setTextColor(Color.BLACK); 
     tv1.setTextSize(18); 

     TextView tv2 = new TextView(this); 
     tv2.setLayoutParams(new TableRow.LayoutParams(0, ViewGroup.LayoutParams.WRAP_CONTENT, 1.0f)); 
     tv2.setText(yrs_str); 
     tv2.setTextColor(Color.BLACK); 
     tv2.setTextSize(18); 

     tr.addView(tv1); 
     tr.addView(tv2); 
     tl.addView(tr, new TableLayout.LayoutParams(
       LayoutParams.MATCH_PARENT, ActionBar.LayoutParams.WRAP_CONTENT)); 
+0

Я пытался выяснить, как это можно сделать, спасибо за вашу помощь. Почему вы использовали ViewGroup? –

Смежные вопросы