2016-06-30 50 views
1

我有一个在.xml文件中定义的表,但行和标题必须动态添加。我在填充宽度方面存在问题,在水平和垂直方向上使用表格行。我试过了stretchColumns参数,但它没有帮助。什么是最好的方式来做到这一点?如何在Android中将TableRow宽度设置为max?

  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

由于您的表格在滚动视图内,因此它没有宽度和高度的限制。因此无法确定哪个是* 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); 

    } 

您可能需要根据您的要求进行定制。

相关问题