2016-06-30 3 views
1

У меня есть таблица, определенная в .xml файле, но строки и заголовки должны быть добавлены динамически. У меня проблема с шириной заливки с табличной строкой по горизонтальной и вертикальной ориентации. Я попробовал параметр stretchColumns, но это не помогло. Каков наилучший способ сделать это?Как установить ширину TableRow в max на Android?

  table = (TableLayout) findViewById(R.id.testList); 

     TableRow headerRow = new TableRow(this); 

     JSONObject obj; 

     obj = new JSONObject(loadJSONFromAsset()); 

     JSONArray records = obj.getJSONArray("tests"); 

     ArrayList<String> headers = new ArrayList<>(); 
     headers.add("Header 1"); 
     headers.add("Header 2"); 
     headers.add("Header 3"); 
     headers.add("Header 4"); 
     headers.add("Header 5"); 

     for(int i = 0; i < headers.size(); i++) { 
      TextView header = new TextView(this); 
      header.setText(headers.get(i)); 
      header.setTextColor(Color.WHITE); 
      header.setBackgroundColor(Color.rgb(24, 116, 205)); 
      header.setPadding(15, 15, 15, 15); 
      header.setTextSize(20); 
      header.setTextAlignment(View.TEXT_ALIGNMENT_CENTER); 

      header.setMaxLines(1); 
      headerRow.addView(header); 

     } 

     table.addView(headerRow); 

и XML

<GridLayout xmlns:android="http://schemas.android.com/apk/res/android" 
android:layout_height="wrap_content" 
android:layout_width="wrap_content"> 


<LinearLayout 
    android:orientation="vertical" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent"> 

    <ScrollView 
     android:layout_width="match_parent" 
     android:layout_height="wrap_content"> 

     <HorizontalScrollView 
      android:layout_height="wrap_content" 
      android:layout_width="match_parent"> 

      <TableLayout 
       android:id="@+id/testList" 
       android:layout_height="match_parent" 
       android:layout_width="wrap_content"> 

      </TableLayout> 
     </HorizontalScrollView> 
    </ScrollView> 

</LinearLayout> 

</GridLayout> 
+0

Поскольку ваш стол находится внутри scrollview, у него нет предела ширины и высоты. Таким образом, нет возможности определить, какая ширина * max *. Вы можете установить его вручную –

+0

@ VladMatvienko, так как это сделать без прокрутки? – Sheppard25

+0

Я не сказал, что вам нужно сделать это без scrollView. Вам нужно решить, какая ширина * max * для вас. Это точное значение, например 100dp, или это ширина экрана, или что? –

ответ

0

Попробуйте этот путь. Следующее позволит убедиться, что TableRow выровнен по всей доступной ширине.

После базовых компонентов, положить TableLayout в XML:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    android:id="@+id/mainLL" 
    android:orientation="vertical"> 
<TableLayout 
      android:id="@+id/tableLayout" 
      android:layout_width="match_parent" 
      android:layout_height="wrap_content"/> 
</LinearLayout> 

Теперь в вашей логике, вы можете добавить в соответствии с количеством элементов от ответа. Это должно быть в цикле for.

for(int i = 0; i < leftComponent.size(); i++) 
    { 
      //Table Layout parameters 
      TableRow.LayoutParams textViewParam = new TableRow.LayoutParams(TableRow.LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT,1.0f); 
      TableLayout tableLayout = (TableLayout) view.findViewById(R.id.fenceTableLayout); 
      TableRow trHead = new TableRow(context); 
      LayoutParams tableRowParams = new LayoutParams(LayoutParams.MATCH_PARENT, LayoutParams.MATCH_PARENT); 
      trHead.setLayoutParams(tableRowParams); 

      TextView nameHead = new TextView(context); 
      nameHead.setText(leftComponent[i]); 
      nameHead.setLayoutParams(textViewParam); 
      nameHead.setGravity(Gravity.CENTER); 
      trHead.addView(nameHead); 

      TextView detailHead = new TextView(context); 
      detailHead.setText(rightComponent[i]); 
      detailHead.setGravity(Gravity.CENTER); 
      detailHead.setLayoutParams(textViewParam); 

      trHead.addView(detailHead); 
      tableLayout.addView(trHead); 

    } 

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

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